【发布时间】:2020-01-16 23:07:23
【问题描述】:
我有以下型号:
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 id 查询属于某个 EmailLists 集的所有客户。我以为我可以用一些东西来查询这个:
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 传递一个可迭代的 id,或者至少找到一种连接子查询的方法
【问题讨论】:
-
__contains适用于文本,您需要使用__in。
标签: django django-models django-orm