﻿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
36183	"Model o2o inheritance with abstract models does not ""evaluate"" a lazy relationship"	BeryCZ		"When I define models like this
{{{#!python
class AbstractPage(models.Model):
    mtime = models.DateTimeField(
        verbose_name=""Last modification at"",
        auto_now=True,
    )

    class Meta:
        abstract = True


class AbstractPageType(models.Model):
    page = models.OneToOneField(
        ""Page"",
        verbose_name=""ID"",
        primary_key=True,
        on_delete=models.CASCADE,
        related_name=""%(class)s"",
        parent_link=True,
    )
    title = models.CharField(
        verbose_name=""Title"",
        max_length=255,
        null=False,
        blank=False,
    )

    class Meta:
        abstract = True


class Page(AbstractPage):
    pass


class ArticlePage(AbstractPageType, Page):
    pass
}}}
And then I do
{{{#!python
ArticlePage.objects.order_by(""-mtime"").all()
}}}
I get
{{{
  File ""django/db/models/manager.py"", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""django/db/models/query.py"", line 1701, in order_by
    obj.query.add_ordering(*field_names)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""django/db/models/sql/query.py"", line 2249, in add_ordering
    self.names_to_path(item.split(LOOKUP_SEP), self.model._meta)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""django/db/models/sql/query.py"", line 1777, in names_to_path
    path_to_parent = opts.get_path_to_parent(model)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""django/db/models/options.py"", line 755, in get_path_to_parent
    targets = (final_field.remote_field.get_related_field(),)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""django/db/models/fields/reverse_related.py"", line 311, in get_related_field
    field = self.model._meta.get_field(self.field_name)
            ^^^^^^^^^^^^^^^^

Exception Type: AttributeError
Exception Value: 'str' object has no attribute '_meta'
}}}

It works when I do
{{{#!python
class ArticlePage(AbstractPageType, Page):
    page = models.OneToOneField(
        ""Page"",
        verbose_name=""ID"",
        primary_key=True,
        on_delete=models.CASCADE,
        related_name=""%(class)s"",
        parent_link=True,
    )
}}}
but I would prefer not to have to define page field in every PageType."	New feature	closed	Database layer (models, ORM)	5.1	Normal	wontfix		BeryCZ Simon Charette	Unreviewed	0	0	0	0	0	0
