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表示選中的框在下面垂直方向上。