Opened 23 months ago
Closed 23 months ago
#34321 closed Bug (invalid)
Unexpected query result after call QuerySet.only() to ForeignKey() with 'self' reference
Reported by: | Mahardhika Praja | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 3.2 |
Severity: | Normal | Keywords: | queryset |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Unexpected query result after calling QuerySet.only('ref__field')
to ForeignKey('self')
class MyModel(models.Model): f1 = models.IntegerField() f2 = models.IntegerField() f3 = models.IntegerField() ref = models.ForeignKey("self", on_delete=models.CASCADE) print(str(MyModel.objects.select_related('ref').only('ref__f1').query))
Output
'SELECT "mymodel"."id", "mymodel"."f1", "mymodel"."ref_id", T2."id", T2."f1", T2."ref_id" FROM "mymodel" INNER JOIN "mymodel" T2 ON ("mymodel"."ref_id" = T2."id")'
Fields "mymodel"."f2"
and "mymodel"."f3"
are excluded from column selection
Another try
print(str(MyModel.objects.select_related('ref').only('f1', 'f2', 'f3', 'ref__f1').query))
Output
'SELECT "mymodel"."id", "mymodel"."f1", "mymodel"."f2", "mymodel"."f3", "mymodel"."ref_id", T2."id", T2."f1", T2."f2", T2."f3", T2."ref_id" FROM "mymodel" INNER JOIN "mymodel" T2 ON ("mymodel"."ref_id" = T2."id")'
Change History (2)
comment:1 by , 23 months ago
Description: | modified (diff) |
---|
comment:2 by , 23 months ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
only()
works as documented and expected, i.e. it replaces the set of fields to load immediately, so in your case all columns"mymodel"."f1"
,"mymodel"."f2"
, and"mymodel"."f3"
fromMyModel
should be omitted in theSELECT
clause.f1
appears becauseMyModel
is involved more than once, it was fixed in b3db6c8dcb5145f7d45eff517bcd96460475c879 (see #21204).