У меня есть следующие модели:
class Contact(models.Model):
email_list = models.ForeignKey(EmailList, related_name='contacts')
customer = models.ForeignKey('Customer')
class EmailList(models.Model):
customers = models.ManyToManyField('Customer',
related_name='lists',
through='Contact')
class Customer(models.Model):
email = models.EmailField(max_length=255, unique=True)
Теперь я хочу запросить всех клиентов, которые принадлежат к определенному набору списков EmailList, по идентификатору EmailList. Я думал, что смогу запросить это с чем-то:
all_customers.filter(lists__id__contains=[email_list_1.pk, email_list_2.pk])
, что странно выглядит, я принимаю и возвращает пустой Queryset, но удивляет то, что он работает, когда запрашивает только 1 EmailList, как:
all_customers.filter(lists__id__contains=email_list_1.pk)
Итак, мой следующий шаг - запрос с помощью оператора AND и:
customers.filter(Q(lists__id__contains=el1.pk) & Q(lists__id__contains=el2.pk))
, но при этом возвращается и очищается QuerySet. Я хотел бы найти способ запросить lists__id__contains
прохождение итерируемого идентификатора или, по крайней мере, найти способ объединить подзапросы