#25173: Model inheritance and select_related
-------------------------------------+-------------------------------------
Reporter: illing2005 | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.8
(models, ORM) | Keywords: ORM, select_related,
Severity: Normal | model inheritance
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
I have the following in models and run into strange behavior when i use
select_related and model inheritance:
Models:
{{{
class A(models.Model):
field_fk = models.ForeignKey('C')
class B(A):
fields_b = models.CharField(max_length=255)
class C(models.Model):
field_c = models.CharField(max_length=255)
}}}
So A has a foreign key to C and B inherits from A. Now I want to query A
downcast it to B and read the relationship to C. To minimize sql queries I
use select_related:
{{{
obj = A.objects.select_related('b', 'field_fk).first()
obj = obj.b
print(obj.field_fk) # this prints "C object"
}}}
Because I use select_related this should result in just one query. But
somehow the information is lost during downcasting and I get to sql
queries:
{{{
SELECT ••• FROM "base_a" INNER JOIN "base_c" ON
( "base_a"."field_fk_id" = "base_c"."id" ) LEFT OUTER JOIN "base_b"
ON
( "base_a"."id" = "base_b"."a_ptr_id" ) ORDER BY "base_a"."id" ASC
LIMIT 1
SELECT ••• FROM "base_c" WHERE "base_c"."id" = 1
}}}
So in the first query looks fine. But I am surprised that I get a second
query. Is this a bug in django's ORM or am I doing something wrong?
I also posted this at stackoverflow, but I am quite sure that this is a
bug.
http://stackoverflow.com/questions/31628588/django-model-inheritance-and-
select-related
--
Ticket URL: <https://code.djangoproject.com/ticket/25173>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/053.23e3a61f6e1221abaf9fd8b363eff489%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.