您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何扩展Django Group模型?

如何扩展Django Group模型?

你可以创建一个对Group进行子类化的模型,添加自己的字段,并使用模型管理器返回所需的任何自定义查询集。这是一个截断的示例,显示了我如何扩展“组”以表示与学校关联的家庭:

from django.contrib.auth.models import Group, User

class FamilyManager(models.Manager):
    """
    Lets us do querysets limited to families that have 
    currently enrolled students, e.g.:
        Family.has_students.all() 
    """
    def get_query_set(self):
        return super(FamilyManager, self).get_query_set().filter(student__enrolled=True).distinct()


class Family(Group):
    notes = models.TextField(blank=True)

    # Two managers for this model - the first is default 
    # (so all families appear in the admin).
    # The second is only invoked when we call 
    # Family.has_students.all()  
    objects = models.Manager()
    has_students = FamilyManager()

    class Meta:
        verbose_name_plural = "Families"
        ordering = ['name']

    def __unicode__(self):
        return self.name

如果仅对Group对象进行子类化,则认情况下它将创建一个新的数据库表,并且管理站点将不会选择任何新字段。

你需要向现有组中注入新字段:

if not hasattr(Group, 'parent'):
    field = models.ForeignKey(Group, blank=True, null=True, related_name='children')
    field.contribute_to_class(Group, 'parent')

要将方法添加到Group中,请子类化,但将模型标记为代理:

class MyGroup(Group):

    class Meta:
        proxy = True

    def myFunction(self):
        return True
Go 2022/1/1 18:24:39 有305人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶