django admin后台管理
admin是django提供的基于web的管理数据库的工具,它是django.contrib 的一部分,可以在项目的settings.py中的INSTALLED_APPS看到。
一、admin管理工具的使用方法如下:
1.在models.py中创建模型
class Students(models.Model): sname=models.CharField(max_length=20) age=models.IntegerField() gender=models.BooleanField() cls=models.ForeignKey('Classes',on_delete=models.CASCADE) def __str__(self): return '%s,%s,%s,%s'%(self.sname,self.age,self.gender,self.cls) class Meta: db_table='students' class Classes(models.Model): cname=models.CharField(max_length=50) headmaster=models.CharField(max_length=20) def __str__(self): return '%s,%s'%(self.cname,self.headmaster) class Meta: db_table='classes'
2.在模型所在app的admin.py中注册模型
from django.contrib import admin from app01.models import Students,Classes admin.site.register(Students) admin.site.register(Classes)
3.将模型映射到数据库中
即执行python manage.py makemigrations和migrate命令
4.创建超级用户
python manage.py createsuperuser,会提示输入用户名和密码等操作,按提示输入即可
5.运行项目,通过http://127.0.0.1:8000/admin/访问,并通过上一步创建的用户名和密码进行登录
要使用admin管理工具,需要在项目的urls.py文件的urlpatterns中保留path('admin/', admin.site.urls)部分,登录后的管理界面如下:
在这个管理界面也可以对模型进行增、删、改操作。点击Students进入学生模型界面,显示如下,默认最后添加的显示在最上面。
二、自定义admin显示样式
以以上Student模型为例。
1.注册模型时给模型取一个别名
admin.site.register(Students,StudentsAdmin),注意此时这个注册操作应该放在下一步定义别名模型的后面
2.定义别名模型
class StudentsAdmin(admin.ModelAdmin): list_display = ('id','sname','age','gender','cls') #默认只显示显示一列,list_display指定显示列,存在多对多关系的列不能指定显示和可编辑 list_editable = ('sname','age','gender','cls') #显示界面可编辑的列 list_per_page = 5 #每页显示行数 ordering = ('age','-sname') #排序,默认升序,前面加-则降序 search_fields = ('sname','age') #显示搜索框,在搜索框内可通过指定字段进行搜索 list_filter = ('age','cls') #过滤选项 fieldsets = [(None, {'fields': ['sname','cls']}), ('other information', {'fields': ['gender', 'age'], 'classes': ['collapse']})] #添加时非必要信息折叠不显示 #filter_horizontal = ('cls',) #仅限多对多列使用,对存在多对多的列可搜索 #filter_vertical = ('cls',) #同上
3.配置文件和模型定义
admin管理界面默认为英文显示,可在settings.py中修改语言LANGUAGE_CODE = 'zh-hans',则在管理界面会显示中文。
管理界面显示的表名称为模型的名称,如果要修改在admin中显示的名称,可在模型定义时的class Meta下增加一行verbose_name_plural = '自定义名称'。
管理界面显示的列名称为模型定义时的属性名称,例如学生的名字sname在管理界面同样显示为sname,如果在定义时加上verbose_name即别名,sname=models.CharField(max_length=20,verbose_name='学生姓名'),则在管理界面该字段会显示为学生姓名,如果定义时没有其他参数也可以直接跟上别名,例如age=models.IntegerField('年龄')。
按照上述操作修改之后的students显示界面如下。
fieldsets在添加学生时起作用,如下,会将指定的非必须信息折叠起来,当然这些信息要么指定了默认值,要么可以为空,否则不为空还是必须要求给定值。
假设存在一个班级与老师的多对多关系,filter_horizontal = ('cls',)效果如下,filter_vertical表示选中的框在下面垂直方向上。