Джанго admin.ModelAdmin наследование

Можно ли создать подклассы из Django admin.ModelAdmin класс?

Я пытаюсь сделать что-то вроде:

class PageAdmin(admin.ModelAdmin):
    form = PageAdminForm
    # Plus many other stuff here (that I don't want to copy/paste in PlacePageAdmin to keep dry...)

class PlacePageAdmin(PageAdmin):
    form = PlacePageAdminForm

    def get_form(self, request, obj=None, **kwargs):
        return super(PlacePageAdmin, self).get_form(request, obj, **kwargs)

    def get_fieldsets(self, request, obj=None):
        fieldsets = copy.deepcopy(super(PlacePageAdmin, self).get_fieldsets(request, obj))
        fieldsets.insert(0,
            ('Place', {
                'fields': (
                    ('address', 'postcode', 'town'),
                ),
            })
        )
        return fieldsets

    def queryset(self, request):
        return PlacePage.objects.filter(page_type=Page.PLACE)

Но я не могу заставить это работать: я получаю u"Key 'address' not found in Form" ошибка при попытке доступа к странице формы PlacePageAdmin.

Кто-нибудь когда-либо делал такую ​​вещь?

Заранее большое спасибо!

Редактировать - код формы:

class PageAdminForm(forms.ModelForm):
    extra_field = forms.CharField()
    class Meta:
        model = Page

class PlacePageAdminForm(PageAdminForm):
    class Meta:
        model = PlacePage

1 ответ

Конечно, вы можете, это базовый Python, даже больше вы можете создавать миксины, которые вы можете добавить в свой список наследования классов, что может быть более полезным - как меньшие и более простые примеры наследования от нескольких источников

ошибка, которую вы получаете, связана с вашими формами, есть несколько вещей, которые могут пойти не так

  • наиболее популярным является определение того, какие поля в form.ModelForm определены - эти поля определены в Meta-классе внутри класса ModelForm - существуют проблемы с наследованием, поэтому убедитесь, что в унаследованных формах вы установите его правильно

  • может быть поле, которое не определено во второй форме или модели - тогда ваше наследование формы может завершиться неудачно

Другие вопросы по тегам