Django QuerySet API反向字段查找
问题描述:
我想知道是否有可能使用__contains
字段查找的“反向”。Django QuerySet API反向字段查找
https://docs.djangoproject.com/en/1.11/ref/models/querysets/#contains
因此,例如:
class Person(models.Model):
...
last_name = models.CharField()
而与此Person
模型,我可以举例来说做以下查询将返回有last_name
领域,将适合的字符串中的人给定:
>>> Person.objects.filter(last_name__contains='John Doe, Jane Roe, ...')
<QuerySet: [Person: Donald Doe]>
答
您可以使用:
import operator
from functools import reduce
from django.db.models import Q
Person.objects.exclude(reduce(operator.or_, (Q(last_name__contains=x) for x in ['John Doe', 'Jane Roe', '...'])))
是一样的比:
Person.objects.exclude(Q(last_name__contains='Jhon') | Q(last_name__contains='Jane'))
您可以通过operator.and_
好吧改变
operator.or_
,这是寻找有任何“李四”,“简罗伊”在等了Person对象的'last_name'字段。所以这仍然不是不幸的倒置。 – White所以我最终想要的是Person对象,例如有'last_name =“Doe”'如果我做'Person.objects.filter(last_name__invertedcontains =“John Doe,Jane Roe”)'(显式为单个字符串,尽管不是在这里很重要) – White
@White srry我误解了这个问题让我纠正 –