Django QuerySet API反向字段查找

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_

+0

好吧改变operator.or_,这是寻找有任何“李四”,“简罗伊”在等了Person对象的'last_name'字段。所以这仍然不是不幸的倒置。 – White

+0

所以我最终想要的是Person对象,例如有'last_name =“Doe”'如果我做'Person.objects.filter(last_name__invertedcontains =“John Doe,Jane Roe”)'(显式为单个字符串,尽管不是在这里很重要) – White

+0

@White srry我误解了这个问题让我纠正 –