У меня есть где-то похожий дикт:
d = {'k1': 'v1', 'k2': 'v2', ...}
и я хочу построить запрос как:
SomeModule.objects.filter (Q (k1 = v1) | Q (k2 = v2) | ...)
что я должен сделать, чтобы построить запрос?
Если вы делаете запросы "ИЛИ", то примерно так:
from django.db.models import Q q = Q() for k,v in d.iteritems(): q |= Q(**{'%s__equal' % k: v}) SomeModule.objects.filter(q)
Для запросов "И" это намного проще, как показано в ответе на В Django, как фильтровать QuerySet с поиском динамического поля :
SomeModule.objects.filter(**d)
Вы также можете сделать это функциональным способом всего за одну строку без этих надоедливых временных переменных, вызванных процедурной парадигмой:
SomeModule.objects.filter(reduce(Q.__or__, (Q(k=v) for k, v in d.iteritems())))