Как сравнить поле ManyToManyField с другим полем 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 с моделью партнера

Теперь я хочу сравнить их в представлениях, например: поле partner может иметь несколько партнеров, например partner1, partner2, partner3

как найти партнеров, соответствующих друг другу внутри модели Quote и CustomUser

Допустим, один из объектов Quote имеет набор [partner1 и partner6] в поле ManyToManyField и я хочу иметь доступ к этой цитате только для пользователей, которые также имеют partner1 и partner6 в их партнерском наборе ManyToManyField. Как я могу отфильтровать и сравнить их? Я также прочитал документацию, но не смог воспроизвести решение. помощь будет признательна.

Вы можете .filter(…) [Django-doc] с:

Quote.objects.filter(partner__customuser=my_user)

Возвращается QuerySet из Quote, которые имеют как минимум одно общее Partner с my_user.

The same Quote will be returned that many times as there are Partners in common. You can use .distinct() [Django-doc] to avoid that:

Quote.objects.filter(partner__customuser=my_user).distinct()
Вернуться на верх