【发布时间】:2013-12-05 22:37:06
【问题描述】:
我是 Python 和 Django 的新手 :) 我需要一些帮助。
我想做什么:
我有一个模型页面,当有人尝试更新一个对象时,我需要添加一个自定义字段“消息”。
为什么?因为我正在建立一个修订系统。这个字段,只是对变化的解释。所以这个字段没有链接到Page(而是链接到另一个模型PageRevision)
经过一些研究,我设法将此字段添加到我的 admin.py 文件中的表单中,如下所示:
class PageAdminForm(forms.ModelForm):
# custom field not backed by database
message = forms.CharField(required=False)
class Meta:
model = Page
它正在工作,我的字段现在显示...但我不希望这个字段无处不在。就在有人尝试更新 Page 对象时。 我找到了这个答案different-fields-for-add-and-change-pages-in-admin,但它对我不起作用,因为它是一个自定义字段(我认为)。
我在 admin.py 中的其余代码:
class PageAdmin(admin.ModelAdmin):
form = PageAdminForm
fields = ["title", "weight", "description", "message"]
list_display = ["title", "weight", "description"]
list_filter = ["updated_at"]
def get_form(self, request, obj=None, **kwargs):
if obj is None:
# not working ?
kwargs['exclude'] = ['message']
# else:
# kwargs['exclude'] = ['message']
return super(PageAdmin, self).get_form(request, obj, **kwargs)
def save_model(self, request, obj, form, change):
if not obj.id:
obj.author = request.user
obj.modified_by = request.user
wiki_page = obj.save()
# save page in revision table
revision = PageRevision(change=change, obj=wiki_page,
request=request)
# retrieve value in the custom field
revision.message = form.cleaned_data['message']
revision.save()
def get_form 不排除我的自定义消息字段,因为我认为它不知道存在。如果我输入另一个字段,例如标题,它就可以了。 那么如何从添加视图中排除自定义字段呢?
谢谢:)
【问题讨论】:
标签: django django-admin