During the refactor of lazy operations[1] abstract models stopped resolving their related field model reference by themselves[2][3] in order to prevent pending lookup pollution. This was necessary in order to warn the users about unresolved relationships in a reliable way.
This change introduced a subtle regression[4] when an abstract model with a lazy app relative (missing an app_label suffix) relationship is derived as a concrete model in another application: # app1/models.py class Refered(models.Model): pass class AbstractReferent(models.Model): refered = models.ForeignKey('Refered') class Meta: abtract = True # app2/models.py from app1.models import AbstractReferent class Refered(models.Model): pass class Referent(AbstractReferent): pass Now that relationships defined on abstract models are only resolved on definition of concrete subclasses the `app2.Referent.refered` points to `app2.Refered` when it used to point to `app1.Refered`. Here are the solutions I had in mind: 1) Refuse the temptation to guess; raise an exception on `app2.Referent` definition about the ambigous relationship and point to resolution options. 2) As abstract models should really just be considered "placeholders for fields" consider this new behavior the correct one. This could be considered a new feature and a deprecation path would have to be thought of. 3) Revert to the previous behavior by converting app relative lazy relationships to the "app_label.Model" form on `RelatedField.contribute_to_class`. I'd favor the first option over the others because I feel like this is really an edge case where both behaviors have merit (and a bad pratice i'd like to prevent) but the third one is definitely the safest option. Thanks for your feedback, Simon [1] https://code.djangoproject.com/ticket/24215 [2] https://groups.google.com/d/msg/django-developers/U5pdY-WVTes/lqfv9cm9bPAJ [3] https://github.com/django/django/pull/4115 [4] https://code.djangoproject.com/ticket/25858 -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at https://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/f4afd52b-ff54-42cb-a222-e421a6536c5e%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.