在Django中选择一条记录:使用查询集过滤外键

时间:2018-08-10 17:31:55

标签: python django django-models

我有三个(相关)类:组(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?

1 个答案:

答案 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