Проблема отправки ключей и значений в django Q()
Я пытаюсь отфильтровать некоторые идентификаторы с помощью запроса django и пытаюсь сделать это эффективно, я хочу получить тот же результат, который я получил от менее эффективной функции, которую я создал ранее, но у меня возникает проблема с ключом словаря, используя Q
from tmd import models
from django.db.models import Q
category = {
"utility": models.Account.UTILITY,
"system": models.Account.SYSTEM
}
country = {
"Guatemala": models.Country.objects.get(name='USA'),
"Honduras": models.Country.objects.get(name='CA'),
}
def get_a(stage=None, **kwargs):
base_args =[]
base_args.append(Q(stage__in=stage))
for key, value in kwargs.items():
base_args.append(Q(key= value))
a_ids = models.Account.objects.filter(*base_args).values_list('id', flat=True)
print("Number of a_ids: {}".format(a_ids.count()))
return a_ids
вход:
a_ids = get_a(country=country["USA"], category=category["utility"])
Проблема находится именно в этой строке:
base_args.append(Q(key= value))
Если я смогу сделать вход, который меняет ключ для каждой итерации, это будет решено
Вы хотите
base_args.append( Q( **{ key: value} ))
Мне интересно, нужен ли вам Q. Тот же способ обработки динамических каргов может привести вас к
a_ids = models.Account.objects.filter( stage__in=stage
) .filter( **kwargs
)
что является и-логикой различных терминов фильтрации ключевых слов=значений