Задать вопрос
Gasoid
@Gasoid

Как фильтровать по такой форме в django orm?

Есть модель с полями
class Order(models.Model):
    o1 = models.BooleanField()
    o2 = models.BooleanField()
    o3 = models.BooleanField()
    o4 = models.BooleanField()
    o5 = models.BooleanField()
    # и т.д.


есть форма на основе модели
class OrderForm(form.ModelForm):
    class Meta:
        model = Order


o1-on это чекбоксы, т.е. какие то из них True, а какие False

Как фильтровать order при таком случае из формы и вообще.
Order.objects.filter(o1=form.cleaned_data['o1'], o2=form.cleaned_data['o2'])
# но тогда получим, что в каком то может быть o1=True, но o2=False и орм ничего не найдет.

Order.objects.filter(Q(o1=form.cleaned_data['o1']) | Q(o2=form.cleaned_data['o2']))
#получим что  при o1=False мы не найдем

пока в голову ничего не пришло, мож кто подскажет?
  • Вопрос задан
  • 2352 просмотра
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@Swasher
Примерно как то так:

myquery &= Q(o1__exact=form.cleaned_data['o1'])
myquery &= Q(o2__exact=form.cleaned_data['o2'])
myquery &= Q(o3__exact=form.cleaned_data['o3'])
table = Order.objects.filter(myquery)


Не уверен насчет применения __exact к булевскому полю, но суть вроде понятна, доделаешь.
Ответ написан
Комментировать
abukin
@abukin
Программирую на Python
Видимо вам необходимо проверять именно на наличие положительного значения в поле.
Вот вам вариант:
Order.objects.filter(**{k: v for k, v in form.cleaned_data.items() if k.startswith('o') and int(v)})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы