前言
django的xadmin后台使用xadmin.site.register注冊時,一張表只能注冊一次,在后面頁面上只能顯示出一個頁面。
有時候我們想從里面篩選出自己想要的數據,比如有全部的學生成績,想單獨抽出一頁顯示不及格的學生,這樣就可以一個model拆開分成不同的類管理。
models設計表
在原有的Teacher表上,新建一個TeacherMan 繼承 Teacher,並在class Meta里面加上一個參數proxy = True
,這樣就可以用父類建的表,不會新生成表 了。
# models.py
from django.db import models
# 作者:上海-悠悠
# Create your models here.
class Teacher(models.Model):
'''老師表'''
teacher_name = models.CharField(max_length=30, verbose_name="老師", default="")
tel = models.CharField(max_length=30, verbose_name="電話", default="", null=True, blank=False)
mail = models.CharField(max_length=30, verbose_name="郵箱", default="", null=True, blank=False)
gender_choices = (
(u'M', u'男'),
(u'F', u'女'),
)
sex = models.CharField(max_length=10,
choices=gender_choices, # 設置性別選項
verbose_name="性別",
default="", null=True, blank=False)
class Meta:
verbose_name = "老師"
verbose_name_plural = verbose_name
def __str__(self):
return self.teacher_name
# TeacherMan 繼承 Teacher
class TeacherMan(Teacher):
'''男老師'''
class Meta:
verbose_name = "男老師"
verbose_name_plural = verbose_name
proxy = True # 不會生成新的表
def __str__(self):
return self.teacher_name
xadmin注冊
在原有的基礎上新增一個TeacherManAdmin類,繼承TeacherAdmin,重寫queryset方法,篩選出想要的數據,並通過xadmin.site.register注冊
# adminx.py
import xadmin
from .models import Teacher, TeacherMan
# 作者:上海-悠悠
class TeacherAdmin(object):
# 顯示的字段
list_display = ["teacher_name", "sex", "tel", "mail"]
# 注冊新的表
class TeacherManAdmin(TeacherAdmin):
# 顯示的字段
list_display = ["teacher_name", "sex", "tel", "mail"]
def queryset(self):
qs = super(TeacherAdmin, self).queryset()
qs = qs.filter(sex="M") # 篩選 sex="男"
return qs
xadmin.site.register(Teacher, TeacherAdmin)
xadmin.site.register(TeacherMan, TeacherManAdmin)
顯示效果
原有的老師信息頁面
新增之后的男老師信息頁面