查找所有没有任何反向查找 m2m 值的对象

Posted

技术标签:

【中文标题】查找所有没有任何反向查找 m2m 值的对象【英文标题】:Find all the objects that does not have any reverse lookup m2m values 【发布时间】:2017-08-09 10:48:34 【问题描述】:

我有一个联系人列表,每个联系人可以属于多个联系人列表。我需要做的是找到不属于任何 ContactList 的所有联系人(即孤立联系人)。

class ContactList(models.Model):
    name = models.CharField()
    contacts = models.ManyToManyField(Contact)

class Contact(models.Model):
    name = models.CharField()

我尝试了以下方法,但它不起作用,因为 contactlist_set 是反向查找字段而不是模型字段。

Contact.objects.filter(contactlist_set=None)

有人能给我一些前进的方向吗?

谢谢

【问题讨论】:

也许这个:Contact.objects.filter(contactlist__isnull=False) ? @nik_m 我得到了 FieldError:无法解析关键字“联系人列表”,联系人没有与联系人列表相关的直接字段 刚刚在本地测试过,它可以工作。你确定它失败了吗? 请允许我使用 dj 1.7 您在回溯中还得到了哪些choices 【参考方案1】:

我认为这应该适合你:

Contact.objects.filter(contactlist__isnull=False)

【讨论】:

感谢您的帮助!

以上是关于查找所有没有任何反向查找 m2m 值的对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 INNER JOIN 或 EXISTS 在 m2m 关系中查找属于多个是不是更好?

JQ:查找具有特定属性值的对象的数组索引

用 Date 对象查找一个月中的所有日子?

Django 1.9.5:偶尔出现反向查找字段的 FieldError

反向***地理标记查找

查找没有键值的数据