使用admin后台系统之前,需要先创建一个系统管理员,创建管理员之前需先同步数据库。 python manager.py createsuperuser 设置为中文 settings中LANGUAGE_CODE = 'zh-hans' 设置时间,时区 TIME_ZONE='Asia/Shanghai' 添加自己的数据模型 在admin.py中注册 admin.site.register(Publisher) 在admin中给model添加数据。 给模型加上__str__函数,比如给Author模型添加str函数,让author的显示更加友好: def __str__(self): return u'%s %s' % (self.first_name, self.last_name) 希望控制admin中添加model数据时的动作,可以修改相应字段的属性。比如author的email字段运行添加的时候为空。在email字段定义中加上blank=True,又比如给book的publication_date添加blank=True, null=True属性。 修改models属性之后记得及时做数据迁移。 使用verbose_name属性指定字段的别名。比如给publisher的name字段指定一个中文的别名verbose_name='出版社名称'。 在models的修改页面,默认显示的是models定义的str函数返回的字符串。 通过定义MoldelAdmin来定制model在admin的表现。比如给Author定义AuthorAdmin。 class AuthorAdmin(admin.ModelAdmin): list_display = ('first_name', 'last_name', 'email') 相应的注册代码也要变化: admin.site.register(Author, AuthorAdmin) 给Author添加一个搜索框: search_fields = ('first_name', 'last_name') 给book添加一个过滤器 class BookAdmin(admin.ModelAdmin): list_display = ('title', 'publisher', 'publication_date') list_filter = ('publication_date',) 过滤器不光可以作用在日期字段上,还可以作用在boolean类型和外键上。 另一种增加日期过滤的方式: date_hierarchy = 'publication_date' 字段排序: ordering = ('-publication_date',) 修改编辑页面显示的字段及显示顺序,默认按照models中字段的定义顺序显示: fields = ('title', 'authors', 'publisher', 'publication_date') 与fields相反的字段是exclude exclude = ['publication_date',] 改善多对多关系中对象选择操作,比如给BookAdmin添加如下属性: filter_horizontal = ('authors',) filter_horizontal和filter_vertical 选项只适用于多对多关系。 一对多的外键关系,admin使用select box来表示。如不想用select box,可添加如下属性,让原来一次性加载所有publisher的select box变成填写publisher的id: raw_id_fields = ('publisher',) 让字段分组显示,fieldsets和上面提到的field不能同时出现: fieldsets = ( ('作者', {'fields': ('authors',)}), ('出版商', {'fields': ('publisher',)}), ) 定制list_display字段的显示。比如给Author加一个布尔型gender字段,来表示性别。为了让显示更加人性化: #定制显示属性 def showgender(self): if self.gender: return '男' else: return '女' list_display = ('first_name', 'last_name', 'email',showgender) 给该函数设置简短描述,让显示更加友好: showgender.short_description = '性别' 可以将modeladmin的属性简单划分为列表页属性和添加、修改页属性 # 列表页属性 list_display,list_filter,search_fields,list_per_page等 # 添加、修改页属性 fields ,fieldsets, filter_horizontal, raw_id_fields等 创建管理对象: 继承自admin.TabularInline,指定model,及要创建的条数。比如: class BooksInfo(admin.TabularInline): model = Book extra = 2 StackedInline类似。 定制化admin站点信息: 1)修改模板文件。比如定制admin登录页面的title: {% extends 'admin/login.html' %} {% block content_title %} XXXX {% endblock %} 2)自定义AdminSite class MyAdminSite(admin.AdminSite): site_header = 'XXXXX' site_url = 'welcome' site_title = 'XXXX'