Как написать синтаксис QuerySet, пусть поле содержит элементы в списке? - PullRequest
1 голос
/ 29 мая 2020

Я знаю, что в Django я могу использовать __icontains для запроса базы данных, используйте LIKE.

name = "joe"

Q(name__icontains=name)

, но если у меня есть список:

name_list = ["joe", "klare"]

Как можно Я пишу синтаксис QuerySet, пусть имя содержит «джо» или «клар»?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Создавая несколько условий:

filters = Q()
for name in name_list:
    filters |= Q(name__icontains=name)

queryset.filter(filters)
0 голосов
/ 29 мая 2020

Создайте общую c функцию для таких операций, если вы регулярно делаете такие запросы с разными свойствами

def generate_property_in_list_query(property_name, list_items):
    query = None
    for item in list_items:
        filter_query = Q(**{"{}__icontains".format(property_name): item})
        query = filter_query if not query else query | filter_query
    return query

Теперь вы можете создать запрос для name like

generate_property_in_list_query("name", ["joe", "klare"])

И операция фильтра модели будет

Model.objects.filter(generate_property_in_list_query("name", ["joe", "klare"]))

И если мы хотим найти какие-то другие свойства, просто измените имя свойства

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...