#13438 closed (duplicate)
bug with isnull ForeignKey queries?
Reported by: | Waldemar Kornewald | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I'm not sure if this really is a bug. I have these models:
from django.db import models class A(models.Model): number = models.IntegerField(null=True) class X(models.Model): fk = models.ForeignKey(A, null=True)
And when I run this query:
X.objects.filter(fk=None)[:10]
The generated SQL is this:
SELECT "djangoappengine_x"."id", "djangoappengine_x"."fk_id" FROM "djangoappengine_x" LEFT OUTER JOIN "djangoappengine_a" ON ("djangoappengine_x"."fk_id" = "djangoappengine_a"."id") WHERE "djangoappengine_a"."id" IS NULL LIMIT 10
Shouldn't the generated query be this:
SELECT "djangoappengine_x"."id", "djangoappengine_x"."fk_id" FROM "djangoappengine_x" WHERE "djangoappengine_x"."fk_id" IS NULL LIMIT 10
Is there a reason why the query uses a LEFT OUTER JOIN on model A in this case (and the JOIN doesn't get trimmed) or is this just an incomplete edge case where the actual intention is to handle queries like X.objects.filter(fk__number=None)
?
Note:
See TracTickets
for help on using tickets.
Dupe of #10790.