2016-07-07 1 views
1

Я пытаюсь запросить модель Django, используя объекты F, но не получая желаемых результатов. Этот запрос:Django сравнить запрос с объектами F добавляет дополнительную проверку не null

Ticket.objects.exclude(lead__email=F('email')).count()

Что переводится в SQL с помощью ОРМ как:

SELECT count(*) FROM "core_ticket" LEFT OUTER JOIN "core_lead" ON ("core_ticket"."lead_id" = "core_lead"."id") WHERE NOT ("core_lead"."email" = ("core_ticket"."email") AND "core_lead"."email" IS NOT NULL)

Моя проблема заключается в том, что ORM добавляет этот AND "core_lead"."email" IS NOT NULL в ИНЕКЕ. что влияет на мои результаты, так как в поле электронной почты могут быть нулевые значения.

Есть ли способ избежать этой дополнительной проверки не нулевой.

ответ

0

В вашей модели для вашего телефона должно быть null=True. Итак, самый простой способ исправить это - удалить null=True, выполнить миграцию и повторить попытку. Таким образом, если сообщение «Нет», оно будет '' вместо None, тогда F() будет работать.

Другой способ - использовать запрос Q(), но он будет стоить в памяти Python.