【问题标题】:how to query all objects in one set that do not have a foreign key in another object in django如何在 django 的另一个对象中查询一组中没有外键的所有对象
【发布时间】:2013-08-04 21:48:27
【问题描述】:

我有以下物品:

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(?)

如何创建此查询?

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

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

    但是,如果你改成这样:

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

    然后你可以找到不属于任何组的成员。

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

    【讨论】:

    • "成员有一个不可为空的外键来分组。"我认为您混淆了CustomerGroup
    【解决方案2】:
    customer.members.filter(groupmember_set__isnull=True)
    

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

    【讨论】:

      【解决方案3】:

      我能够做到这一点:

      customer.members.filter(groupmember__isnull=True)
      

      【讨论】:

        猜你喜欢
        • 2021-03-08
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多