我有一个模型名称'Group',与Django用户有一个ManyToMany关系,以及一个'Membership'表 .
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表的外键 .
提前致谢 .
EDIT:
这里显然有些不对劲:
>>> User.objects.get(id=2).groups.get(id=1).users.all()
[]
1 回答
不幸的是,这是Django ORM中记录的错误 . 您可以在此处找到有关它的更多信息:
https://code.djangoproject.com/ticket/17299
最好的选择是简单地指向默认模型 . 由于两者都保存到数据库中的相同位置,因此可以使用the following technique将auth.models.User中返回的模型"convert"到代理用户模型 . 确保使用第二次没有访问数据库的那个 .