Opened 20 months ago

Last modified 20 months ago

#34321 closed Bug

Unexpected query result after call QuerySet.only() to ForeignKey() with 'self' reference — at Version 1

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 Mahardhika Praja)

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 (1)

comment:1 by Mahardhika Praja, 20 months ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top