【发布时间】:2013-06-12 15:01:27
【问题描述】:
我有一个模型名称“组”,它与 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()
[]
【问题讨论】:
-
我暂时发现这个丑陋的丑陋解决方案将原始sql添加到组模型: def get_users(self): return User.objects.raw('SELECT * FROM '+User._meta.db_table+'加入 '+Membership._meta.db_table+' ON '+Membership._meta.db_table+'.user_id = '+User._meta.db_table+'.id WHERE '+Membership._meta.db_table+'.group_id = '+str(self.id ))
标签: python django orm many-to-many django-users