динамический запрос столбца django - PullRequest
1 голос
/ 11 июля 2009

У меня есть где-то похожий дикт:

d = {'k1': 'v1', 'k2': 'v2', ...}

и я хочу построить запрос как:

SomeModule.objects.filter (Q (k1 = v1) | Q (k2 = v2) | ...)

что я должен сделать, чтобы построить запрос?

Ответы [ 2 ]

3 голосов
/ 11 июля 2009

Если вы делаете запросы "ИЛИ", то примерно так:

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)
0 голосов
/ 23 марта 2010

Вы также можете сделать это функциональным способом всего за одну строку без этих надоедливых временных переменных, вызванных процедурной парадигмой:

SomeModule.objects.filter(reduce(Q.__or__, (Q(k=v) for k, v in d.iteritems())))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...