Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 11, 2012 18:13:49

SorrowFuck
От: Хабаровск
Зарегистрирован: 2012-10-10
Сообщения: 64
Репутация: +  2  -
Профиль   Отправить e-mail  

Многовариантная выборка.

Есть модель с большим количеством полей, среди которых встречаются и TextField, IntegerField,BooleanField.
Есть форма по этой модели.
Есть представление. Задача сделать выборку на основании тех данных, которые переданы через форму. В форме могут быть заполнены не все поля, а выборочно.
Не могу сообразить, как сделать выборку только по тем полям которые переданы в запросе. Избегая большого количества IF, ведь вариантов заполненных и не заполненых полей может быть много.
То есть может быть методу filter можно передать словарь в который предварительно забиты переданные значения формы.



_________
Новичок

Офлайн

#2 Дек. 11, 2012 19:02:02

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Многовариантная выборка.

Во-первых, методу filter действительно можно передать словарь, как и любому другому методу класса или обычной функции, которая принимает именованые параметы

instance=Model.objects
dct=dict()
dct.udate({key:value})
dct.udate({key1:value1})
instance=instance.filter(**dct)
Во-вторых, можно использовать функцию Q

from django.db.models import Q
import operator
qs=[Q(**{condition:value}) for condition, value in some]
instance=Model.objects.filter(reduce(operator.or_, qs))



Офлайн

#3 Дек. 11, 2012 19:15:46

SorrowFuck
От: Хабаровск
Зарегистрирован: 2012-10-10
Сообщения: 64
Репутация: +  2  -
Профиль   Отправить e-mail  

Многовариантная выборка.

FishHook
Во-первых, методу filter действительно можно передать словарь, как и любому другому методу класса или обычной функции, которая принимает именованые параметы
спасибо, буду делать.



_________
Новичок

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version