Assume the following Django models:
{{{#!python
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):
{{{#!python
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`:
{{{#!python
>>> SpecialJournalist._meta.get_parent_list()
[<class 'Reporter'>]
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32975>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* Attachment "test30273-modified.zip" added.
Test project to see this error
Old description:
New description:
{{{#!python
class Journalist(Reporter):
class SpecialJournalist(Journalist):
{{{#!python
}}}
{{{
>>> SpecialJournalist._meta.get_parent_list()
[<class 'Reporter'>]
}}}
--
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:1>
Old description:
> This is similar to #30273, but in this case, the `InlineModelAdmin.model`
> >>> SpecialJournalist._meta.get_parent_list()
> [<class 'Reporter'>]
> }}}
New 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:
{{{#!python
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):
{{{#!python
class ArticleInline(admin.TabularInline):
model = Article
fk_name = 'journalist'
@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'>]
}}}
--
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:2>
* stage: Unreviewed => Accepted
Comment:
Thanks for the report.
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:3>
* owner: nobody => Bal Krishna Jha
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:4>
* owner: Bal Krishna Jha => (none)
* status: assigned => new
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:5>
* owner: (none) => Taulant Aliraj
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:6>
* has_patch: 0 => 1
Comment:
Opened a PR for this: https://github.com/django/django/pull/14812
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:7>
* needs_better_patch: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:8>
* needs_better_patch: 1 => 0
* stage: Accepted => Ready for checkin
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:9>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"0e8be73812a6e62d5a6b12a585d133b56bc2bf52" 0e8be738]:
{{{
#!CommitTicketReference repository=""
revision="0e8be73812a6e62d5a6b12a585d133b56bc2bf52"
Fixed #32975 -- Fixed admin system check for inlines with foreign keys to
proxy models.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32975#comment:10>