Opened 3 years ago
Last modified 3 years ago
#32975 closed Bug
ModelAdmin for proxy model with InlineModelAdmin for proxy superclass reference results in admin.E202 — at Initial Version
Reported by: | Lucas Weyne | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | 3.1 |
Severity: | Normal | Keywords: | proxy, InlineModelAdmin, E202 |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
This is similar to #30273, but in this case, the InlineModelAdmin.model
is a model with references to a proxy superclass
Assume the following Django models:
class Reporter(models.Model): name = models.CharField(max_length=50) class Journalist(Reporter): class Meta: proxy = True class SpecialJournalist(Journalist): class Meta: proxy = True class Article(models.Model): journalist = models.ForeignKey(Journalist, on_delete=models.CASCADE)
Register model admins as follows (exemplary):
class ArticleInline(admin.TabularInline): model = Article fk_name = 'reporter' @admin.register(SpecialJournalist) class SpecialJournalistAdmin(admin.ModelAdmin): inlines = [ArticleInline]
This will result in the following error:
<class 'ArticleInline'>: (admin.E202) fk_name 'journalist' is not a ForeignKey to 'SpecialJournalist'.
This problem occurs on this check this check: https://github.com/django/django/blob/3.1.13/django/forms/models.py#L1006
A ValueError
is raised because the result for SpecialJournalist._meta.get_parent_list()
does not include Journalist
:
>>> SpecialJournalist._meta.get_parent_list() [<class 'Reporter'>]
Test project to see this error