Django QuerySet API обратный поиск полей

Я задаюсь вопросом, возможно ли как-то использовать "обратное" __contains поиск полей.

https://docs.djangoproject.com/en/1.11/ref/models/querysets/

Так, например:

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]>

1 ответ

Ты можешь использовать:

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.or_ от operator.and_

Другие вопросы по тегам