Джанго 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 - существуют проблемы с наследованием, поэтому убедитесь, что в унаследованных формах вы установите его правильно
может быть поле, которое не определено во второй форме или модели - тогда ваше наследование формы может завершиться неудачно