Django最强大的部分之一是自动管理界面。它从模型中读取元数据,以提供快速,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。管理员的推荐用途仅限于组织的内部管理工具。它不是用于构建整个前端。

管理员有许多用于自定义的钩子,但要注意尝试专门使用这些钩子。如果您需要提供一个更加以流程为中心的接口来抽象出数据库表和字段的实现细节,那么可能是时候编写自己的视图了。

1 创建Django项目

django-admin startproject crm_v1

2 创建并注册app

python manage.py  startapp  bms

修改settings.py

INSTALLED_APPS = [
'django.contrib.admin',
......
'bms.apps.BmsConfig',
]

3  创建模型 modles.py

在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。

设计哲学

模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。

来介绍一下迁移 - 举个例子,不像 Ruby On Rails,Django 的迁移代码是由你的模型文件自动生成的,它本质上只是个历史记录,Django 可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。

from django.db import models

class Publish(models.Model):
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField()
def __str__(self):
return self.name class Author(models.Model):
name = models.CharField(max_length=16)
age = models.IntegerField()
def __str__(self):
return self.name class Book(models.Model):
title = models.CharField(max_length=32)
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE)
pub_date = models.DateField()
price = models.DecimalField(max_digits=6, decimal_places=2)
author = models.ManyToManyField(to="Author")
state = models.IntegerField(choices=[(1, "已出版"), (2, "未出版")], default=1)
def __str__(self):
return self.title

4 数据库操作

为模型的改变生成迁移文件

python manage.py makemigrations 

应用用数据库迁移

python manage.py migrate 

数据库迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。

5 激活管理工具

通常我们在生成项目时会在 urls.py 中自动设置好,

from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),]

6 创建超级用户

python manage.py createsuperuser

7 使用管理工具

启动Django项目

输入url:http://127.0.0.1:8000/admin

即可看到登录页面,输入刚才创建的用户名和密码进行登录

登录成功后可以看到如下页面

admin的定制

1 注册类

在admin.py中只需要将Mode中的某个类注册,即可在Admin中实现增删改查的功能

from django.contrib import admin
from django.contrib import adminfrom bms.models import Book,Publish,Author,AuthorDetail
admin.site.register(Book)
admin.site.register(Publish)
admin.site.register(Author)

以上是注册Book,Publilsh, Author类,在admin中即可看到

2 添加数据

通过点击add分别给author,book ,publish 添加数据

再创建书籍是可以看到一件有了出版社和作者的选择

3 查看book表数据

可以看到只要书籍名称,没有作者、价格、出版社等信息

4 定制列,显示更多的字段信息

需要利用ModelAdmin进行操作

class BookInfo(admin.ModelAdmin):
list_display = ['title', 'price', 'publish']
   # list_displey 中的字段必须是和数据库中有的
admin.site.register(Book, BookInfo)

可以看到已经多了两列信息

5  显示多对多字段----author(作者姓名)

class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
    list_display = ['title', "show_author", 'price', 'publish', 'state']
admin.site.register(Book, BookInfo)

6 list_filter,列表时,定制右侧快速筛选。

class BookInfo(admin.ModelAdmin):

    def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()]) list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author'] # 列表中写筛选的字段 admin.site.register(Book, BookInfo)

7 search_fields 列表,模糊搜索的功能

class BookInfo(admin.ModelAdmin):

    def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()]) list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author']
search_fields = ['author__name', 'price', 'title', 'publish__name']
   # 由于 author是多对的字段,publish是外键,故不能直接写字段名,必须跨表查看
admin.site.register(Book, BookInfo)

8 自定义active

class BookInfo(admin.ModelAdmin):

    def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()]) list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author']
search_fields = ['author__name', 'price', 'title', 'publish__name'] def func(self, request, queryset):
print(self, request, queryset)
print(request.POST.getlist("_selected_action")) def price_to_zero(self, request, queryset):
queryset.update(price=0) # 把选择的价格都设置为0 func.short_description = "自定义action动作"
price_to_zero.short_description = "价格初始化"
# 设置在action下拉菜单中显示的信息
actions = [func, price_to_zero] # 把自定义的两个方法添加到actions中
    # Action选项都是在页面上方显示
actions_on_top = True
# Action选项都是在页面下方显示
actions_on_bottom = False
admin.site.register(Book, BookInfo)

(1)选择刚才定义的action动作

可以看到后台的输出

(2)执行价格初始化动作

结果如下,可以看到价格已经设置为0

9 ordering 列表时,数据排序规则

设置根据id,价格排序,也可反向排序 return ['-title', 'price']

class BookInfo(admin.ModelAdmin):
......
def get_ordering(self, request):
return ['title', 'price']

点击title列或者price列即可进行排序

10 设置admin后台为中文显示

修改settings.py文件

将LANGUAGE_CODE = 'en-us'改为
LANGUAGE_CODE = 'zh-hans'

也可设置表的字段为中文,加上 verbose_name选项即可。

class Book(models.Model):
title = models.CharField(max_length=32,verbose_name="书名")
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE,verbose_name="出版社")
pub_date = models.DateField(verbose_name="出版日期")
price = models.DecimalField(max_digits=6, decimal_places=2,verbose_name="价格")
author = models.ManyToManyField(to="Author",verbose_name="作者")
state = models.IntegerField(choices=[(1, "已出版"), (2, "未出版")], default=1,verbose_name="状态") def __str__(self):
return self.title

效果如下:

SHOW AUTHOR还是英语的,现在来改一下

class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
show_author.short_description = "作者"

short_description 设置字段的描述信息

最终结果如图

其他设置可参考 : https://www.cnblogs.com/yuanchenqi/articles/8323452.html

Django Admin管理入门的更多相关文章

  1. Django admin 管理工具

    admin 组件的使用 Django 提供了基于 web 的管理工具.Django 自动管理工具是 django.contrib 的一部分. INSTALLED_APPS = [ 'django.co ...

  2. Django admin管理

    admin的配置 admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功 ...

  3. Django——admin管理工具

    一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...

  4. 吴裕雄--天生自然Django框架开发笔记:Django Admin 管理工具

    Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED_APPS 看到它: ...

  5. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

    配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admi ...

  6. django admin管理后台中文添加问题

    django版本号 1.7.8 #create database mydb character set utf8;#django-admin.py startproject mysite#设置sett ...

  7. 10.5Djang admin 管理工具

    2018-10-5 17:30:57 Django admin 管理工具  参考连接: https://www.cnblogs.com/yuanchenqi/articles/8323452.html ...

  8. 01: 重写Django admin

    目录: 1.1 重写Django admin项目各文件作用# 1.2 重写Django admin用户认证 1.3 将要显示的表注册到我们自己的kind_admin.py中 1.4 项目首页:显示注册 ...

  9. 你应该使用 Django admin 的 9 个理由(转)

    你应该使用 Django admin 的 9 个理由 “问题是,我问到的每个人都持反对意见,他们认为 admin 只限于超级用户,很不灵活并且是难以定制.”—来自 Reddit 的 andybak 我 ...

随机推荐

  1. Centos6.5DRBD加载失败,系统更换yum源(国内163)

    我安装的系统是centos6.5的,要在系统上安装DRBD镜像软件,安装完后,无法加载modprobe drbd. 需要更新kernel. 1,首先,先把yum源更换成国内的,不然无法更新kernel ...

  2. spring的7个模块

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. Spring ...

  3. vim折叠快捷键

    参考:http://www.cnblogs.com/fakis/archive/2011/04/14/2016213.html 1. 折叠方式 可用选项来设定折叠方式: 可在Vim 配置文件中设置 s ...

  4. new/delete和malloc/free的比较

    从C++角度上说,使用new分配堆空间可以调用类的构造函数,而malloc()函数仅仅是一个函数调用,它不会调用构造函数,它所接受的参数是一个unsigned long类型.同样,delete在释放堆 ...

  5. java并发之CyclicBarrier

    一.CyclicBarrier简述 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互 ...

  6. CSS实现Tab布局

    一.布局方式 1.内容与tab分离 <div class="container"> <div class="tab-content"> ...

  7. 沉默的螺旋--digest

    孤立的恐惧对名望的追求高度的和谐和共识是大部分人的幸福感.安全感的源头公开性能让某种行为具有社会可接受性 P5谈论和沉默决定了意见气候那些被新的东方政策说服的人,感觉自己所想的都是合理的.因此他们就会 ...

  8. 《Spring Cloud与Docker微服务架构实战》配套代码

    不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将 ...

  9. Spring_boot入门(1)

    Spring boot 将很多东西都集成在一起了,搭建maven项目的时候只需要引入很少的依赖就可以实现项目的搭建. 1.搭建maven项目结构 2.引入Spring boot 依赖 直接去官网找就可 ...

  10. python3 os模块的常用功能及方法总结

    1.os.getcwd()     #显示当前工作路径 2.os.listdir('dirname')    #返回指定目录下的所有文件和目录名 3.os.remove('filename')     ...