如何在一个集合中查询django中另一个对象中没有外键的所有对象

时间:2013-08-04 21:48:27

标签: django django-models django-queryset

我有以下对象:

class Customer(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    customer = models.ForeignKey(Customer)

class GroupMember(models.Model):
    group = models.ForeignKey(Group)
    member = models.ForeignKey(Member)

class Member(models.Model):
    customer = models.ForeignKey(Customer)

我可以通过以下方式将所有成员分配到一个组:

group_members = group.groupmember_set.all()

所有可供某位客户使用的会员:

member_list = customer.members.all()

我想创建一个可供客户使用但未分配给组的所有成员的列表。类似的东西:

not_group_members = Member.objects.filter(?)

如何创建此查询?

3 个答案:

答案 0 :(得分:0)

使用您当前的设置,这是不可能的,因为Member有一个不可为空的外键进行分组。

但是,如果你改为:

class Member(models.Model):
    customer = models.ForeignKey(Customer, null=True)

然后你可以找到不属于任何群体的会员。

not_group_members = Member.objects.filter(group=None)

答案 1 :(得分:0)

customer.members.filter(groupmember_set__isnull=True)

(我在这里使用了members因为你做了,即使默认的相关名称是member_set。)

答案 2 :(得分:0)

我能够通过以下方式实现这一目标:

customer.members.filter(groupmember__isnull=True)