Opened 5 years ago

Closed 5 years ago

Last modified 4 years ago

#13438 closed (duplicate)

bug with isnull ForeignKey queries?

Reported by: wkornewald Owned by: nobody
Component: Database layer (models, ORM) Version: master
Severity: Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

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 Changed 5 years ago by Alex

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to duplicate
  • Status changed from new to closed

Dupe of #10790.

comment:2 Changed 4 years ago by jacob

  • milestone 1.2 deleted

Milestone 1.2 deleted

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