Opened 15 years ago

Closed 15 years ago

Last modified 13 years ago

#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)?

Change History (2)

comment:1 by Alex Gaynor, 15 years ago

Resolution: duplicate
Status: newclosed

Dupe of #10790.

comment:2 by Jacob, 13 years ago

milestone: 1.2

Milestone 1.2 deleted

Note: See TracTickets for help on using tickets.
Back to Top