我在文档中一直在阅读这篇文章但却找不到任何内容。
您是否建议在Django中扩展自定义表单?
这是我的问题。我正在使用Biblion编写博客应用程序。问题是我不想使用默认行为(从管理站点创建博客帖子)。有这样的形式:https://github.com/eldarion/biblion/blob/master/biblion/forms.py#L13具有自定义逻辑来保存Post(并进行一些解析)。
我希望扩展此表单以进行一些自定义操作。例如,我想让一些用户创建博客帖子,但不允许他们发布。相反,我应该检查并调节它们。因此,为此我尝试使用类似的东西:
class PostForm(AdminPostForm):
publish = forms.BooleanField(
required = False,
widget = forms.HiddenInput # don't show it
)
它现在正在运行,但我想问你们是否有其他选项(我可以阻止它显示在我的模板中,迭代表单文件,但不要非常喜欢这个选项)。
其他选项是从AdminPostForm
复制/粘贴代码,但似乎也不是一个好的选择。但是,如果没有简单的方法来为几种情况定制表单,我就会这样做。
想法?
谢谢!
答案 0 :(得分:5)
如果您想在表单中实现每用户逻辑,可能需要扩展ModelAdmin
而不是表单。
在这里,您要覆盖ModelAdmin
的{{1}}方法
save_form
在save_form
self
中添加了3个参数。您将执行以下操作:
request, form, change
通常,Django类具有很多的钩子,因此您可以在那里插入自定义逻辑。
在这里,您只是隐藏输入,但任何拥有不错浏览器的人都可以修改此值并在def save_form(self, request, form, change):
instance = super(MyModelAdmin, self).save_form(request, form, change)
if instance.published and not user.has_perm('mark_published'):
instance.published = False #You could be displaying a message here.
return instance
输入中发布True
。
答案 1 :(得分:-4)
我希望扩展此表单以进行一些自定义操作
停在那儿。
表单没有“动作”。表单仅用于验证输入。 ModelForms包含一个用于保存有效输入的扩展。重点是验证输入。
如果你想要“动作”,你应该写视图功能。
您可能还需要创建自定义管理操作https://docs.djangoproject.com/en/1.3/ref/contrib/admin/actions/(不是表单)
如果要从中删除项目,请执行此操作。