Django objects.filter несколько фильтров - PullRequest
3 голосов
/ 03 октября 2011

Пользователь может выбирать поля для фильтрации, мне нужно фильтровать только по этим полям, но может быть 3 поля.

Пользователь выбирает все три варианта: a, b и c

Foo.objects.filter(a=1,b=2,c=3), good

Что если пользователь выберет только 1 или 2 варианта?

Foo,objects.filter(a=1, b=2, c=not selected)

Как я могу сделать это, чтобы фильтровать только по выбранным вариантам. Это происходит из сообщения в представление и выглядит, если оно не выбрано:

a=1,b=NaN,c=3

Таким образом, b не был выбран, и я не хотел бы включать его в свой фильтр,

Foo.objects.filter(a=1,c=3)

Или я, может быть, так что фильтр, который в основном "все" селектор

Так, как указано выше:

Foo.objects.filter(a=1,b=%,c=3)

1 Ответ

15 голосов
/ 03 октября 2011

Вы можете использовать ключевое слово аргумент dict:

filterargs = { 'a': 1, 'b': 2, 'c': 3 }
Foo.objects.filter(**filterargs)

тогда фильтровать только по a и b:

filterargs = { 'a': 1, 'b': 2 }

или а и с:

filterargs = { 'a': 1, 'c': 3}
...