【问题标题】:Extending the Auth User and Group models in Django在 Django 中扩展 Auth User 和 Group 模型
【发布时间】:2012-08-21 22:48:22
【问题描述】:

我最初只扩展了 Group 模型,虽然我让额外的字段正常工作,但当我切换回 auth-user 模型时,我最终得到了不一致的结果:

group1 = MyGroup(..)
user = group1.user_set.all()[0]
group2 = user.groups.all()[0]
group1 == group2 #(False!)
type(group1) #MyGroup..
type(group2) #Group..

我的下一个想法是扩展 auth.User 和 auth.Group 模型。

示例结构:

from django.contrib.auth.models import User As DjangoUser
from django.contrib.auth.models import Group As DjangoGroup

class MyGroup(DjangoGroup):
    extra1 = models.CharField(..)

class MyUser(DjangoUser):
    extra1 = models.CharField(..)

这可能吗? I saw a bug-report stating it was fixed here. 但是我没有看到实现这一点的正确方法的示例,也不清楚这部分是否需要在错误修复后:

manager = UserManager()
class MyUser(DjangoUser):
    signature = forms.CharField()
    post_count = forms.IntegerField()
    objects = manager
    _default_manager = manager

这种行为有什么想法/例子吗?我试图在用户模型中重新定义“组”链接,但这导致了验证错误。理想情况下,我希望能够运行上面的示例并拥有 group1 == group2 和 type(group2) == type(MyGroup())

【问题讨论】:

标签: django django-models extending-classes


【解决方案1】:

您可以为 django 用户/组模型动态添加新字段,这样就不会创建新的类类型。参考见:http://code.google.com/p/comaie-django-groups/source/browse/trunk/src/comaie/django/groups/models.py?r=5

模型.外键( 团体, 空=真, 空白=真, related_name = '孩子', 详细名称 = _('父'), help_text = _('组的父组。无,如果是根节点。') ).contribute_to_class(组,'父') def get_all_groups(self): """ 返回用户所属的所有组以及这些组的所有父组 团体。 """ direct_groups = self.groups.all() 组 = 设置() 对于 direct_groups 中的组: 祖先 = group.get_ancestors().all() 对于祖先的anc: groups.add(anc) 组。添加(组) 返回组 setattr(用户,'get_all_groups',get_all_groups)

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 2011-01-31
    • 2015-10-18
    • 2012-05-03
    • 1970-01-01
    • 2014-07-18
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多