【问题标题】:How to find a list of objects that do not have a relationship with another object in django如何在 django 中查找与另一个对象没有关系的对象列表
【发布时间】:2013-08-14 21:20:26
【问题描述】:

我有以下对象结构:

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

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


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

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

如何找到尚未创建 ClubMember 对象的客户的所有成员?

结果将是成员的查询集。

如何做到这一点?

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    如果您要查找特定客户:

    customer.member_set.filter(clubmember__isnull=True)
    

    如果您希望所有没有 ClubMember 匹配的会员,无论客户如何:

    Member.objects.filter(clubmember__isnull=True)
    

    【讨论】:

    • clubmemeber_set__isnull,假设默认related_name?
    • @KevinHenry - 更详细地说 - <foo>_set 名称指的是一个经理对象,如文档所示:docs.djangoproject.com/en/dev/topics/db/queries/…。在字段查找中,经理不参与 - 您只需使用相关模型的小写名称:docs.djangoproject.com/en/1.5/topics/db/queries/…
    • 感谢您的澄清。我从来没有注意到这一点,因为我总是为这些字段提供明确的related_names,在这种情况下,该名称既用于经理,也用于字段查找。
    【解决方案2】:

    可能是这样的:

    Member.objects.attribute.exclude(id=clubmember_set__member_id)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-14
      • 2018-12-31
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多