我正在尝试使用F对象查询Django模型,但没有获得所需的结果。 查询是:
Ticket.objects.exclude(lead__email=F('email')).count()
ORM将其翻译成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在where子句中添加了这个AND "core_lead"."email" IS NOT NULL
。这会影响我的结果,因为电子邮件字段中可以有空值。
有没有办法避免这种额外的非空检查。
答案 0 :(得分:0)
我认为您的电子邮件模型定义中必须有null=True
。因此,解决此问题的最简单方法是删除null=True
,迁移然后重试。因此,如果电子邮件为“无”,则为''
而不是None
,则F()将起作用。
另一种方法是使用Q()查询,但它会花费在Python内存中。