本次模板
from django.db import models class BookInfo(models.Model): btitle = models.CharField(max_length=30) bpub_date = models.DateField() def __str__(self): return self.btitle class HeroInfo(models.Model): hname = models.CharField(max_length=30) hgender = models.BooleanField(default=False) hbook = models.ForeignKey(to=BookInfo,on_delete=\'cascade\')
Django 后台登录
1、创建一个管理员用户
python manage.py createsuperuser
2、管理界面本地化
#编辑settings.py文件,设置编码、时区 LANGUAGE_CODE = \'zh-Hans\' TIME_ZONE = \'Asia/Shanghai\'
3、浏览器访问
127.0.0.1:8000/admin
自定义管理页面
1、Django提供了admin.ModelAdmin类,通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
from django.contrib import admin class HeroInfoInline(admin.StackedInline): model = HeroInfo extra = 2 class BookInfoAdmin(admin.ModelAdmin): list_display = [\'pk\', \'btitle\', \'bpub_date\'] list_filter = [\'btitle\'] search_fields = [\'btitle\'] list_per_page = 3 # fields = [\'pk\',\'bpub_date\', \'btitle\'] fieldsets = [ (\'basic\', {\'fields\': [\'btitle\']}), (\'more\', {\'fields\': [\'bpub_date\']}), ] inlines = [HeroInfoInline]
2、打开booktest/admin.py文件,向admin注册ModelAdmin
使用admin.site.register()
from django.contrib import admin from .models import * admin.site.register(BookInfo,BookInfoAdmin)
使用装饰器@admin.register()
@admin.register(HeroInfo) class HeroInfoAdmin(admin.ModelAdmin): list_display = (\'hname\', \'hgender\', \'common\', \'hbook\') search_fields = [\'hname\',\'hbook__btitle\']
问题:如果在str方法中返回中文,在修改和添加时会报ascii的错误
解决:在str()方法中,将字符串末尾添加“.encode(\'utf-8\')”
列表页属性
list_display:显示字段,可以点击列头进行排序 list_display = [\'pk\', \'btitle\', \'bpub_date\']
list_filter:过滤字段,过滤框会出现在右侧 list_filter = [\'btitle\']
search_fields:搜索字段,搜索框会出现在上侧 search_fields = [\'btitle\']
list_per_page:分页,分页框会出现在下侧 list_per_page = 10 添加、修改页属性
fields:属性的先后顺序 fields = [\'bpub_date\', \'btitle\']
fieldsets:属性分组 fieldsets = [ (\'basic\',{\'fields\': [\'btitle\']}), (\'more\', {\'fields\': [\'bpub_date\']}), ]
inlines:关联注册(可以将内嵌的方式改为表格 class HeroInfoInline(admin.TabularInline))
search_fields关联查询,关联对象__关联对象属性
@admin.register(HeroInfo) class HeroInfoAdmin(admin.ModelAdmin): list_display = (\'hname\', \'hgender\', \'common\', \'hbook\') search_fields = [\'hname\',\'hbook__btitle\']
3、布尔值的显示
发布性别的显示不是一个直观的结果,可以使用方法进行封装
class HeroInfo(models.Model): hname = models.CharField(max_length=30) hgender = models.BooleanField(default=False) hbook = models.ForeignKey(to=BookInfo,on_delete=\'cascade\') def gender(self): if self.hgender: return \'男\' else: return \'女\' gender.short_description = \'性别\'