Opened 17 years ago
Closed 17 years ago
#6761 closed (fixed)
select_related broken with model inheritance
Reported by: | Dan Watson | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | queryset-refactor |
Severity: | Keywords: | qs-rf model inheritance select_related | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
When using select_related()
on an inherited model, it tries (and fails, obviously) to select parent fields on the child table. For instance, using the models from #6706, calling Employer.objects.select_related()
yields the following SQL:
SELECT "testapp_employer"."id", "testapp_employer"."first_name", "testapp_employer"."last_name", "testapp_employer"."personinfo_ptr_id", "testapp_employer"."title", "testapp_employer"."office_id", "testapp_personinfo"."id", "testapp_personinfo"."first_name", "testapp_personinfo"."last_name", "testapp_location"."id", "testapp_location"."name" FROM "testapp_employer" INNER JOIN "testapp_personinfo" ON ("testapp_employer"."personinfo_ptr_id" = "testapp_personinfo"."id") INNER JOIN "testapp_location" ON ("testapp_employer"."office_id" = "testapp_location"."id") ORDER BY "testapp_personinfo"."last_name" ASC, "testapp_personinfo"."first_name" ASC
I think the solution may involve using opts.local_fields
in django.db.models.sql.query.fill_related_selections
, but I don't know the code well enough to be certain.
Change History (2)
comment:1 by , 17 years ago
comment:2 by , 17 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
(In [7240]) queryset-refactor: Fixed default (no fields) case of select_related() to work with model inheritance. Refs #6761.