Django, как сделать имя поля переменной при использовании fieldname__contains? - PullRequest
0 голосов
/ 11 июня 2019
query_dict = {'server_name': 'mysql', 'type': linux}

class ServerInfo(db.models):
    server_name = models.CharField(max_length=255)
    type = models.CharField(max_length=20)

from django.db.models import Q

q = Q()

for k, v in query_dict.items():
    q.add(Q(k__icontains=v), Q.AND)

Это не может работать, как я могу заменить имя поля на переменную, подобную приведенной выше k?

Мой английский плохой, извините за это.

1 Ответ

1 голос
/ 11 июня 2019

Вы можете создать словарь с key__contains и value и распаковать содержимое в объектный вызов Q с синтаксисом **. т.е.

>>> for k, v in query_dict.items():
...     kwargs = {f'{k}_contains': v} # or use kwargs = {'%s_contains' % k: v} if the python version less than 3.6
...     q.add(Q(**kwargs), Q.AND)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...