语言本地化和时间本地化:
在setting.py文件中将更改
# 语言
LANGUAGE_CODE = 'zh-hans'
# 时间
TIME_ZONE = 'Asia/Shanghai'
在cmd中:python manage.py createsuperuser
from app.models import 模型类
admin.site.register(模型类)
1.自定义模型类
2.注册模型类的时候给register
函数添加第二个参数,就是自定义模型管理类的名字
创建一个地区管理类,页面上显示地区id和地区的名字
模型类:model.py
from django.db import models
# Create your models here.
class Areas(models.Model):
"""创建省市县的数据库关联模型"""
#创建主键
# id = models.CharField(max_length=20, primary_key=True)
# 区域名称 verbose_name: 在后台管理时显示的标题名称
name = models.CharField( max_length=20, null=True, blank=True)
# 区域上级标识,外键
pid = models.ForeignKey('Areas', on_delete=models.CASCADE,null=True, blank=True, db_constraint=False)
# 地名简称
sname = models.CharField(max_length=40, null=True, blank=True)
# 地区等级
leval = models.CharField(max_length=11, null=True, blank=True)
# 区域编码
citycode = models.CharField(max_length=20, null=True, blank=True)
# 区域邮政编码
yzcode = models.CharField(max_length=20, null=True, blank=True)
# 区域组合名称
mername = models.CharField(max_length=100, null=True, blank=True)
# 经纬度
Lng = models.CharField(max_length=10, null=True, blank=True)
Lat = models.CharField(max_length=10, null=True, blank=True)
# 地址拼音
pinyin = models.CharField(max_length=100, null=True, blank=True)
class Meta:
db_table = 'areas'
def __str__(self):
"""更改返回name"""
return self.name
后台管理类:admin.py
from django.contrib import admin
from booktest.models import Areas
class AreasAdmin(admin.ModelAdmin):
"""创建地区的管理类模型"""
# 要在标题栏显示的内容 前两个为类属性后一个为自己定义的方法
list_display = ['id', 'name','aparent']
# 注册地区模型类
admin.site.register(Areas, AreasAdmin)
每页中显示多少条数据,默认为每页显示100条数据,属性如下
list_per_page=100
我们将其修改成每页显示20条数据,修改admin文件下:
class AreasAdmin(admin.ModelAdmin):
"""创建地区的管理类模型"""
# 设置页面上一次显示10个数据
list_per_page = 20
list_display=[模型字段1,,模型字段2,....]
修改admin:
class AreasAdmin(admin.ModelAdmin):
"""创建地区的管理类模型"""
# 要在标题栏显示的内容 前两个为类属性后一个为自己定义的方法
list_display = ['id', 'name','pid']
# 设置页面上一次显示10个数据
list_per_page = 20
点击列头可以进行升序或降序排列。
将方法作为列
列可以是模型类的字段,也可以是模型类的方法,要求方法要有返回值
在app的models.py文件中的Areas模型类中添加f方法:
def aparent(self):
"""自己定义的标题显示方法父级地区"""
if self.pid is None:
return "----"
return self.pid.name
admin.py文件中:
class AreasAdmin(admin.ModelAdmin):
"""创建地区的管理类模型"""
# 要在标题栏显示的内容 前两个为类属性后一个为自己定义的方法
list_display = ['id', 'name','aparent']
# 设置页面上一次显示10个数据
list_per_page = 20
显示如下:
方法默认是不能排序的,如果需耀排序为方法指定排序依据:
aparent.admin_order_field = 模型类字段
在models.py文件中的Areas类中添加:
# 设置点击列标题的时候要按什么排序
aparent.admin_order_field = 'name'
列标题默认为属性或方法的名称,可以通过属性设置。需耀先将模型字段封装成方法,在对方法使用这个属性,模型字段不能直接使用这个属性。
aparent.short_description=列标题
在models.py文件中的Areas类中添加:
# 设置列标题的名称
aparent.short_description="父级地区"
如果是直接用的类属性的话加列标题要在模型定义的哪里添加verbose_name=’标题’
在models.py文件中的Areas类中更改:
name = models.CharField( verbose_name='名称',max_length=20, null=True, blank=True)
属性:只能接受字段,会将对应的值列出来,用于快速过滤,一般用于有重复的字段。
list_filter=[]
修改admin中的自定义管理类AreasAdmin:
list_filter = ['name']
用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。
search_fields = []
修改admin中的自定义管理类AreasAdmin:
# 添加一个以地区名的搜索框
search_fields = ['name']
顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True.
actions_on_top = True
底部显示属性,设置为True在底部显示,设置为Flase不在底部显示,默认为False
在admin中的自定义管理类AreasAdmin添加:
# 增加一个底部的删除选项
actions_on_bottom = True
# 将上面的删除操作选项关了
actions_on_top = False
属性:fields=[]
默认如图:
# 自定义编辑页的显示顺序,以及要显示的内容
fields = ['name','pid','leval','yzcode','citycode','mername','Lng','Lat','pinyin']
属性:
fieldsets = (
("组1标题",{"fields":["字段1",'字段2']}),
("组2标题",{"fields":["字段1",'字段2']})
)
在admin中的自定义管理类AreasAdmin添加:
fieldsets = (
("地区",{"fields":["name",'pid']}),
("区域",{"fields":['leval','yzcode','citycode','mername']}),
("经纬度",{'fields':['Lng','Lat']}),
("拼音",{'fields':['pinyin']})
)
注:fields和fieldsets只能使用一个要不然会报一下错误ERRORS:
在一对多的挂戏中,可以在一端编辑页面中编辑多端的队形,嵌入多端对象的方式包括表格、块两种。类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。子类TabularInline:以表格的形式嵌入。子类:StackedInline:以块的形式嵌入。
1.块的显示
class AreasStackedInline(admin.StackedInline):
"""在编辑页中显示子类(块的形式显示)"""
# 关联子类对象
model = Areas
# 显示额外的编辑对象
extra = 1
2)在admin中的自定义管理类AreasAdmin添加:
# 编辑页显示子类(块的形式显示)
inlines = [AreasStackedInline]
class AreasTabularInline(admin.TabularInline):
"""在编辑页中显示子类信息(表格的形式显示)"""
# 关联子类对象
model = Areas
# 显示额外的编辑对象
extra = 1
2)在admin中的自定义管理类AreasAdmin添加:
# 编辑页显示子类(表格的形式显示)
inlines = [AreasTabularInline]
找到django中admin应用然后将里面的模板文件复制一份放到自己的项目模板文件目录下,然后更改自己要更改的页面上的模板文件.
即:
{% extends "admin/base.html" %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}a>h1>
<hr>
<h1>自定义的管理页模板h1>
<hr>
{% endblock %}
{% block nav-global %}{% endblock %}
添加了一个自定义管理页面的文字。
django admin 后台文档