Сравнить список с ManyToMany в Django
Дан список members. В нём содержаться экземпляры класса User. Нужно проверить все ли элементы данного списка являются элементами ManyToMany, в котором содержаться экземпляры того же самого класса User
models.py:
class Dialog(models.Model):
members = models.ManyToManyField(User, blank=True, verbose_name="Участники диалога")
messages = models.ManyToManyField(Message, blank=True, verbose_name="Сообщения")
views.py:
members = [receiver.user, request.user]
if Dialog.objects.filter(members=members): # Проверка на идентичность списков
return redirect('/')
Ответы (1 шт):
Если для 1-го объекта, то соберите ID всех members и получите аналогичный список из Dialog.objects.get(id=some_id).members_set.values_list('id', flat=True).
Лучше даже не список, а множество. Затем можете сравнивать эти значения. Очень удобно работать с множествами.
Также посмотрите про функции агрегации в Django, если не найдете подходящую функцию, то напишите свою, исходя от вашей БД.
Для PostgreSQL нужно смотреть в сторону операций с массивами, вроде @>. Этого будет достаточно