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'>]

Change History (1)

by Lucas Weyne, 3 years ago

Attachment: test30273-modified.zip added

Test project to see this error

Note: See TracTickets for help on using tickets.
Back to Top