2

我最初只扩展了 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(..)

这可能吗?我看到了一个错误报告,说明它已在此处修复。但是,我没有看到实现此目的的正确方法的示例,也不清楚这部分是否在错误修复后是必要的:

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

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

4

1 回答 1

0

您可以动态地将新字段添加到 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)

于 2012-12-08T14:41:21.830 回答