Как сравнить поле 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()