【发布时间】:2011-11-15 17:04:14
【问题描述】:
我正在编写一个小应用程序,以允许 django 管理员更改列表中的 AddThis 共享字段,以允许用户共享他们当前正在编辑的对象(以及查看共享计数):
以一个简单的 BlogEntry 为例,我创建了一个自定义的 ModelAdmin:
class AddThisAdmin(admin.ModelAdmin):
addthis_config = {
'title_field' : None,
'description_field' : None,
'url_field' : None,
'image_field' : None,
}
def get_form(self, request, obj=None, *args, **kwargs):
metaform = super(AddThisAdmin, self).get_form(request, obj, **kwargs)
if obj:
# Grab users config and find the fields they specified ...
metaform.base_fields['add_this'] = AddThisField(self.add_this)
return metaform
在用户 BlogEntryAdmin 中继承如下:
class BlogEntryAdmin(admin.ModelAdmin, AddThisAdmin):
addthis_config = {
'title_field' : 'blog_title',
'description_field' : 'blurb',
}
addthis_config 允许用户在其 BlogEntry 对象中指定字段,从哪里提取 AddThis 中使用的标题/描述/url 和图像。在我决定在 BlogEntryAdmin 中使用自定义字段集之前,这一切都非常有效:
class BlogEntryAdmin(admin.ModelAdmin, AddThisAdmin):
addthis_config = {
'title_field' : 'blog_title',
'description_field' : 'blurb',
}
fieldsets = [{ ... }]
'BlogEntry.fieldsets0['fields']' 指的是表单中缺少的字段 'add_this'。
我知道这是因为 django 管理员在实际实例化之前对 BlogEntryAdmin 类上的字段集 (django.contrib.admin.validation) 进行了验证(并插入了我的自定义字段)。
tldr :有没有办法告诉django.contrib.admin.validation 忽略字段集中的字段?
【问题讨论】:
-
顺便说一句,您是否有理由从
ModelAdmin和AddThisAdmin继承而不仅仅是AddThisAdmin?BlogEntry.get_form()不会解析为ModelAdmin的get_form,而不是您自定义的吗? -
我上面的评论可能完全错误。已经很晚了,当我比现在清醒得多时,我可能会弄错 MRO ;)
-
不,你是对的,我认为不需要多重继承!
标签: django django-admin django-forms