参考学习:https://blog.csdn.net/houyanhua1/article/details/84932773
应用名/models.py(定义模型类):
from django.db import models
# 定义模型类
class AreaInfo(models.Model):
'''地区模型类'''
# 地区名称
atitle = models.CharField(verbose_name='标题', max_length=20) # verbose_name指定后台管理页面中,显示的列名。(默认显示Atitle)
# 自关联属性
aParent = models.ForeignKey('self', null=True, blank=True)
def __str__(self):
return self.atitle
# 后台管理页面中,实例方法的返回值也可以当做实例属性对待。
def title(self):
return self.atitle
title.admin_order_field = 'atitle' # 指定title实例方法返回值的排序依据。(根据atitle属性值进行排序)
title.short_description = '地区名称' # 指定后台管理页面中,显示的列名。(默认显示Title)
def parent(self):
if self.aParent is None:
return ''
return self.aParent.atitle
parent.short_description = '父级地区名称'
应用名/admin.py(注册模型类,配置模型管理类):
from django.contrib import admin
from booktest.models import AreaInfo,PicTest
# 编辑页。一对多中,一方查看对应的所有多方。 (块方式查看)
class AreaStackedInline(admin.StackedInline):
# 写多类的类名
model = AreaInfo
extra = 2 # 多方最后的可编辑的空行数(用于添加对应的多方,默认3)。
# 编辑页。一对多中,一方查看对应的所有多方。 (表格方式查看)
class AreaTabularInline(admin.TabularInline):
model = AreaInfo
extra = 2
# 模型管理类
class AreaInfoAdmin(admin.ModelAdmin):
'''地区模型管理类'''
list_per_page = 10 # 指定每页显示10条数据
list_display = ['id', 'atitle', 'title', 'parent'] # 设置显示哪几列。列表中可以是实例属性,也可以是模型的实例方法名。
actions_on_bottom = True # 在列表底部也显示操作动作的下拉框。 (默认只在列表顶部显示)
actions_on_top = False # 在列表顶部不显示操作动作的下拉框。
list_filter = ['atitle'] # 列表页右侧过滤栏(根据atitle过滤)
search_fields = ['atitle'] # 列表页上方的搜索框(根据atitle搜索)
# fields = ['aParent', 'atitle'] # 编辑页中显示的字段,以及字段的顺序。
fieldsets = (
('基本', {'fields':['atitle']}), # 编辑页中显示的字段进行分组。 (基本组)
('高级', {'fields':['aParent']}) # (高级组)
)
# inlines在一对多的一方中配置。
# inlines = [AreaStackedInline] # 编辑页中,一对多关系,查看一方对应所有的多方。 (查看省下的所有市)
inlines = [AreaStackedInline] # AreaStackedInline表示块的方式查看;AreaStackedInline表示表格的方式查看。
# 注册模型类
admin.site.register(AreaInfo, AreaInfoAdmin) # 通过参数指定对应的模型管理类。 也可以通过管理类的装饰器指定(@admin.register(AreaInfo))。
admin.site.register(PicTest)
重写后台管理也的模板。
后台管理页的页面模板的路径如下:
/home/用户名/.virtualenvs/py_django/lib/python3.5/site-packages/django/contrib/admin/templates/admin
将路径下的对应模板,例如:base_site.html,拷贝到 应用名/templates/admin/base_site.html,并自定义修改模板。
利用模板的加载顺序(查找顺序),会优先从应用中查找对应的模板,找到后就不会去默认目录下找模板。