id summary reporter owner description type status component version severity resolution keywords cc stage has_patch needs_docs needs_tests needs_better_patch easy ui_ux 26523 Unable to select_related() an implicit one to one relationship in multi-table inheritance Paulo nobody "Given the following models: {{{ class Fruit(models.Model): weight = models.PositiveIntegerField(default=100) class Apple(Fruit): farmer = models.CharField(max_length=200, blank=True) class Kiwi(models.Model): fruit = models.OneToOneField(Fruit) farmer = models.CharField(max_length=200, blank=True) }}} I would like to prefetch the fruit object related to an apple or kiwi. So I ran the following: {{{ In [2]: kiwi = Kiwi.objects.select_related('fruit').latest('id') QUERY = u'SELECT ""fruits_kiwi"".""id"", ""fruits_kiwi"".""fruit_id"", ""fruits_kiwi"".""farmer"", ""fruits_fruit"".""id"", ""fruits_fruit"".""weight"" FROM ""fruits_kiwi"" INNER JOIN ""fruits_fruit"" ON ( ""fruits_kiwi"".""fruit_id"" = ""fruits_fruit"".""id"" ) ORDER BY ""fruits_kiwi"".""id"" DESC LIMIT 1' - PARAMS = () [0.84ms] In [3]: kiwi.fruit Out[3]: }}} As you can see, calling kiwi.fruit does not result in any extra queries. Now I tried with Apple: {{{ In [4]: apple = Apple.objects.select_related('fruit_ptr').latest('id') QUERY = u'SELECT ""fruits_fruit"".""id"", ""fruits_fruit"".""weight"", ""fruits_apple"".""fruit_ptr_id"", ""fruits_apple"".""farmer"" FROM ""fruits_apple"" INNER JOIN ""fruits_fruit"" ON ( ""fruits_apple"".""fruit_ptr_id"" = ""fruits_fruit"".""id"" ) ORDER BY ""fruits_apple"".""fruit_ptr_id"" DESC LIMIT 1' - PARAMS = () [0.31ms] In [5]: apple.fruit_ptr QUERY = u'SELECT ""fruits_fruit"".""id"", ""fruits_fruit"".""weight"" FROM ""fruits_fruit"" WHERE ""fruits_fruit"".""id"" = %s' - PARAMS = (16,) [0.35ms] Out[5]: }}} Calling apple.fruit_ptr results in a query to the database even though it's set to prefetch the related fruit. I've traced the bug to https://github.com/django/django/blob/stable/1.8.x/django/db/models/query_utils.py#L186" Bug closed Database layer (models, ORM) 1.8 Normal duplicate Unreviewed 0 0 0 0 0 0