2016-10-05 3 views
0

Я хочу использовать фильтр с условием OR в django при фильтрации данных объекта.Фильтр в django с условием

У меня есть объект класса, и у меня есть 3 или 4 поля, на основе которых я хочу отфильтровать данные с условием OR в Django.

Например.

Obj = Books.objects.filter(title=title or price=price or description=description or author=author) 

Я думаю, что это неправильный способ выполнения фильтра.

Что такое правильный способ использовать OR условие в моем Джанго фильтре

ответ

2
from django.db.models import Q 

Obj = Books.objects.filter(Q(title=title) | Q(price=price) | Q(description=description) | Q(author=author)) 

Docs: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects Источник: https://stackoverflow.com/a/739922/4808939

+0

это работает, если я прохожу все filed.If я пройти один или два его дает мне ошибку follwing 'Невозможно использовать None как значение запроса' – vikrant

+0

В приведенном выше примере кода, если я передаю только заголовок, он дает мне ошибку Невозможно использовать None в качестве значения запроса – vikrant

+0

@vikrant Вы хотите разрешить пустое значение запроса? Если это так, вы должны их дезинфицировать, прежде чем передавать их в объекты Q. Например: title = title или "" '. Это заменит значение пустой строкой, если это «Нет». И если вам не нужны пустые значения, вы должны условно построить запрос OR'ed вместе. – wholevinski

Смежные вопросы