2

我有一个模型名称“组”,与 Django 用户有一个多对多关系,以及一个“成员”表。

class UserManager(models.Manager):get_query_set(self):
        return super(UserManager, self).get_query_set().select_related('expenses')

class User(DjangoUser):
    objects = UserManager()
    class Meta:
        proxy = True

class Group(models.Model):
    name = models.CharField(verbose_name=_('Name'), max_length=255)
    users = models.ManyToManyField(User, related_name='groups', through='Membership')

class Membership(models.Model):
    user = models.ForeignKey(User)
    group = models.ForeignKey(Group)
    date_joined = models.DateField(auto_now_add=True, verbose_name=_('Date joined'))

当我尝试为用户获取组时,一切都很好:

>>> User.objects.get(id=2).groups.all()    
[<Group: Group object>]
>>> User.objects.get(id=2).groups.get(id=1)
<Group: Group object>

问题是我无法获取组的用户:

>>> Group.objects.get(id=1).users.all()    
[]

我注意到的一件事是我的数据库中的“user_id”字段(由 django 生成)没有 auth_user 表的外键,但“group_id”字段具有 myapp_group 表的外键。

提前致谢。

编辑:

这里显然有问题:

>>> User.objects.get(id=2).groups.get(id=1).users.all()    
[]
4

1 回答 1

1

不幸的是,这是 Django ORM 中记录的错误。您将在此处找到有关它的更多信息:

https://code.djangoproject.com/ticket/17299

最好的选择是简单地指向默认模型。由于两者都保存在数据库中的同一个位置,您可以使用以下技术将返回的模型从 auth.models.User “转换”为您的代理用户模型。确保您使用的是不会再次访问您的数据库的那个。

于 2013-06-17T01:02:42.287 回答