如何将 ManyToManyField 与另一个 ManyToManyField 进行比较

How to Compare ManyToManyField to another ManyToManyField

我有一个模型Partner

class Partner(models.Model):
    name = models.CharField(max_length=100, blank=True, null=True)
    group = models.OneToOneField(
        Group, on_delete=models.DO_NOTHING, blank=True, null=True)

    def __str__(self):
        return self.name

我还有 2 个其他模型,一个是 CustomUser,另一个是 Quote

class CustomUser(AbstractUser):
    #...
    name = models.CharField(max_length=160, null=True, blank=True)
    partner = models.ManyToManyField(
        Partner, blank=True)

class Quote(models.Model):
    #...
    visibility = models.CharField(max_length=10)
    partner = models.ManyToManyField(
        Partner, blank=True)

两者都有一个与 ManyToManyField 相关的合作伙伴字段到合作伙伴模型

现在我想在以下视图中比较它们: 合作伙伴字段可以有多个合作伙伴,如合作伙伴 1、合作伙伴 2、合作伙伴 3

如何在 Quote 和 CustomUser 模型中找到相互匹配的合作伙伴

可以说,其中一个报价对象在 ManyToManyField 中设置了 [partner1 和 partner6],我只想让在其合作伙伴 ManyToManyField 中也有 partner1 和 partner6 的用户访问该报价。

那么我该如何筛选和比较它们呢? 我也阅读了文档,但无法重现该解决方案。帮助将不胜感激。

编辑:我可以稍微解释一下,假设从报价中的整组合作伙伴说起,如果即使一个合作伙伴与一组合作伙伴匹配到 CustomUser,那么 CustomUser 也应该可以访问它。

您可以 .filter(…) [Django-doc] 使用:

Quote.objects.filter(<b>partner__customuser=<i>my_user</i></b>)

这将 return QuerySetQuote 至少 Partnermy_user.

相同的 Quote 将被 return 编辑多次,因为有 Partner 是共同的。您可以使用 .distinct() [Django-doc] 来避免这种情况:

Quote.objects.filter(<b>partner__customuser=<i>my_user</i></b>)<b>.distinct()</b>