• python测试开发django-53.xadmin里Model分类管理(proxy=True)


    前言

    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)
    

    显示效果

    原有的老师信息页面

    新增之后的男老师信息页面

  • 相关阅读:
    Disruptor详细介绍之快速入门
    Java魔法类:sun.misc.Unsafe
    Java开源框架推荐
    CAS(Compare and Swap)无锁算法之volatile不能保证原子性而Atomic可以
    数据库乐观锁、悲观锁、共享锁、排它锁、行锁、表锁概念的理解
    Linux上查找线程使用的CPU时间最长
    虚拟机内存结构
    插入排序和归并排序(算法学习1)
    POJ-2942:吃糖果
    POJ-4004:数字组合(用位移方法解组合数问题,Java版)
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/10720896.html
Copyright © 2020-2023  润新知