django 之 admin
admin 是django 自带的用来让你进行数据库管理的web app.
提供了很多定制化功能,你甚至可以用它来进行公司内部的内容管理
启用admin
用startproject命令创建项目时django admin就默认启用了
步骤: 1.添加"django.contrib.admin"到项目的设置settings中的INSTALLED_APPS。 2.admin有四个依赖项— django.contrib.auth, django.contrib.contenttypes, django.contrib.messages, 和django.contrib.sessions。 如果这些应用程序不在项目中的INSTALLED_APPS列表中,则添加它们。 3.Add django.contrib.auth.context_processors.auth and django.contrib.messages.context_processors.messages to the 'context_processors' option of the DjangoTemplates backend defined in your TEMPLATES as well as django.contrib.auth.middleware.AuthenticationMiddleware and django.contrib.messages.middleware.MessageMiddleware to MIDDLEWARE. 这些默认情况下都是活动的,所以你只需要在手动调整设置后才需要这样做。 4.确定应用程序的哪个模型应该在管理界面中编辑。
admin 访问地址
http://localhost:yourport/admin/
默认 http://127.0.0.1:8000/admin/
操作步骤
1.创建后台管理员
python manage.py createsuperuser
2.设置数据表名称
class UserType(models.Model):
name = models.CharField(max_length=50)
class Meta:
verbose_name = '用户类型'
verbose_name_plural = '用户类型'
3.在每个app下有个admin.py文件 ,在那里面注册你想要被管理的表
from django.contrib import admin # Register your models here. from app01 import models admin.site.register(models.Article) admin.site.register(models.Account)
admin定制
你可以定义每张表显示哪些字段、对某些字段进行过滤、允许搜索等功能,这就需要定制一下admin的类了
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title','pub_date','account','read_count')
admin.site.register(models.Article, ArticleAdmin)
fields 决定对表进行修改时展示哪些字段
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title','pub_date','account','read_count')
fields = ['title','account','pub_date']
还可以多个字段显示在一行。
fields = ['title','account',('pub_date','read_count')]
exclude 不展示哪些字段
date_hierarchy = 'pub_date' 按日期分类显示数据
你也可以在一个相关的模型上指定一个字段,例如:
date_hierarchy = 'author__pub_date'
fieldsets 分组显示
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title','pub_date','account','read_count')
date_hierarchy = 'pub_date'
fieldsets = (('文章相关',{
'fields':('title','content'),
'classes': ('wide', 'extrapretty'),
}),('高级',{
'classes':('collapse',),
'fields':(('account','read_count'),'pub_date')
}))
filter_horizontal,filter_vertical 均用于多对多字段
filter_horizontal = ['tags',]
list_display 定义表数据显示哪些列
除了表中有的字段,models自己定义的字段也能放入list_display
from django.db import models
from django.contrib import admin
class Person(models.Model):
name = models.CharField(max_length=50)
birthday = models.DateField()
def decade_born_in(self):
return self.birthday.strftime('%Y')[:3] + "0's"
decade_born_in.short_description = 'Birth decade'
class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'decade_born_in')
自定义标签
#models.py
from django.utils.html import format_html
class Tag(models.Model):
"""文章标签表"""
name = models.CharField(max_length=64,unique=True)
date = models.DateTimeField(auto_now_add=True)
color_code = models.CharField(max_length=6)
def colored_name(self):
return format_html(
'<span style="color: #{};">{}</span>',
self.color_code,
self.name,
)
def __str__(self):
return self.name
#admin.py
class TagAdmin(admin.ModelAdmin):
list_display = ['name','colored_name']
from django.utils.safestring import mark_safe
format_html和mark_safe非常类似,本质还是调用mark_safe函数,不同在于传参方式,mark_safe直接传递完整的html字符串;
而format_html需要使用{}占位符:
list_display_links = ('first_name', 'last_name') 点下这2个字段就跳到修改页
list_filter 过滤,把要过滤的字段放到对应列表里就可以
list_filter = ('register_date',)
list_per_page = 20 每页显示20条数据
radio_fields 把外键或choice字段由下拉框变成单选框
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title','pub_date','account','read_count')
date_hierarchy = 'pub_date'
filter_horizontal = ['tags',]
radio_fields = {'account': admin.VERTICAL}
自动补全
autocomplete_fields = ['account',] 自动补全,外键查询数据多时,方便查找
raw_id_fields 言语无法表示的字段
就把外键变成这样子
readonly_fields = ('address_report',) 只读字段
search_fields 模糊查找
search_fields = ['account__username','title']
浙公网安备 33010602011771号