我有三个(相关)类:组(A组,B组等),主题(讨论主题)和GroupMember(将用户链接到组的列表)。现在,每个主题都链接到一个或多个将在其中发布的组。但是,与此同时,用户可以订阅主题(“订阅”字段)。参见下面的大纲:
class Group(models.Model):
name = models.CharField(max_length=255)
members = models.ManyToManyField(User, through='GroupMember')
class Topic(models.Model):
name = models.CharField(max_length=255)
groups = models.ManyToManyField(Group, related_name='topics')
subscriptions = models.ManyToManyField(User, related_name='subscribed_to')
class GroupMember(models.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
start = models.DateTimeField(auto_now_add=True)
end = models.DateField(null=True, blank=True)
现在,我想选择一个主题,然后获取该组中所有成员的列表。我尝试过:
topic = Topic.objects.get(1)
members = GroupMember.objects.filter(group=topic.groups)
但这会产生此错误:
int() argument must be a string, a bytes-like object or a number, not 'ManyRelatedManager'
所以我的问题是:有没有一种方法可以通过基于查询集(我猜是topic.groups)而不是整数来选择一个组来查询GroupMembers?
答案 0 :(得分:2)
我认为这应该可行:
topic = Topic.objects.get(1)
members = GroupMember.objects.filter(group__in = topic.groups.all())
可以在in
上参考django的文档:
https://docs.djangoproject.com/en/2.1/ref/models/querysets/#in