Проблема отправки ключей и значений в 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 
           )

что является и-логикой различных терминов фильтрации ключевых слов=значений

Вернуться на верх