Как отфильтровать модель со списком, содержащим поле и значение? - PullRequest
3 голосов
/ 26 августа 2011

посмотрите, что у меня есть:

> bar = [(u'code__regex', u'^[^J]'), (u'active__exact', u'0'), (u'type__id__exact', u'E01')]

Есть поля / значения, которые я хочу использовать для фильтрации модели Foo.

> #want to have this equivalent:
> Foo.objects.filter(bar)

Спасибо!

Ответы [ 2 ]

8 голосов
/ 26 августа 2011
Foo.objects.filter(**dict(bar))

Это не проблема django, это проблема с питоном.Вы хотите передать пары ключевых слов в качестве аргументов ключевых слов (kwargs) в фильтр.Ваш bar является идеальным как набор kwarg, поэтому dict(bar) преобразует его в словарь, а префикс ** сообщает синтаксическому анализатору python, что словарь должен интерпретироваться как аргументы ключевого словаприемник.

Запись о переполнении стека Понимание kwargs в Python более подробно описывает это.

3 голосов
/ 26 августа 2011

Вы не сказали, хотите ли вы это в И или ИЛИ.Если AND в порядке, вы можете просто преобразовать этот список в словарь и передать его фильтру:

Foo.objects.filter(**dict(bar))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...