У меня есть эта модель в моем коде:
class Conversation(models.Model):
participants = models.ManyToManyField(User, related_name="message_participants")
и мне нужно отфильтровать этот объект модели "Разговор" полем "участники" "многие ко многим". значение: у меня есть, например, 3 пользовательских объекта, поэтому я хочу получить только объекты "Разговор", в которых есть 3 пользователя в этом поле "Участники".
Я попытался сделать это:
def get_exist_conv_or_none(sender,recipients):
conv = Conversation.objects.filter(participants=sender)
for rec in recipients:
conv = conv.filter(participants=rec)
где отправитель является объектом User, а "получатели" - это список объектов пользователя. он не будет вызывать ошибки, но он дает мне неправильный Object of Conversation. Спасибо.
изменить: Более новая попытка привела меня к этому:
def get_exist_conv_or_none(sender,recipients):
participants=recipients
participants.append(sender)
conv = Conversation.objects.filter(participants__in=participants)
return conv
которые в основном имеют одинаковую проблему. Он дает объекты, в которых есть один или несколько "участников" в списке. но то, что я ищу, является точным соответствием объекта many-to-many. Значение, объект с точными "пользователями" на нем отношение "многие ко многим".
edit 2: Моя последняя попытка. все равно не будет работать.
def get_exist_conv_or_none(sender,recipients):
recipients.append(sender)
recipients = list(set(recipients))
conv = Conversation.objects.annotate(count=Count('participants')).filter(participants=recipients[0])
for participant in recipients[1:]:
conv.filter(participants=participant)
conv.filter(count=len(recipients))
return conv