Я пытаюсь использовать ORM Django для генерации запроса с использованием как дополнительных, так и фильтрующих методов. Что-то вроде этого:Django OR query using Extra и Filter
Model.objects.filter(clauseA).extra(clauseB).all()
Это генерирует запрос, но проблема в том, что все в предложении фильтра AND'd со всем в дополнительной статье, так что SQL выглядит следующим образом:
SELECT * FROM model WHERE clauseA AND clauseB.
Мой вопрос, есть ли способ изменить оператор комбинированного по умолчанию для запроса в Django таким образом, что запрос будет генерироваться:
SELECT * FROM model WHERE clauseA OR clauseB.
Вы просто ищете [или запрос?] (Http://stackoverflow.com/questions/739776/django-filters-or) (Возможный дубликат) – Sayse
Нет, это работает только для аргументов в методе фильтрации. Мне нужно изменить комбинатор по умолчанию, так что то, что возвращается из метода 'extra()', является OR'd для того, что возвращается из метода 'filter()' (вместо AND'd, как это сейчас). То, что у меня есть в дополнительном методе, - это родной SQL, который не может быть представлен в ORM Django и не может быть завершен с помощью 'Q' – jcern
. Это' Model.objects.filter (Q (clauseA) | Q (clauseB)).() 'недействительным решением? Я не понимаю, почему вам нужен отдельный вызов (из моего собственного тестирования этот фильтр, показанный здесь, будет генерировать желаемый SQL-вывод). Я уверен, что возможно изменить комбинатор по умолчанию, но я бы не советовал его – Sayse