san*_*lto 1 python django django-models django-forms
我一直在文档中读到这个,但找不到任何东西.
你建议在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
)
Run Code Online (Sandbox Code Playgroud)
它现在正在工作,但我想问你们是否有其他选项(我可以阻止它显示在我的模板中,迭代表单文件,但不太喜欢这个选项).
其他选择是从中复制/粘贴代码AdminPostForm,但似乎也不是一个好的选择.但是如果没有简单的方法来为几种情况定制表单,我就会这样做.
想法?
谢谢!!
如果要在表单中实现每用户逻辑,可能需要扩展ModelAdmin而不是表单.
在这里,你想要覆盖ModelAdmin的save_form方法.
save_form发生在addtion 3个参数self:request, form, change.您将执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
通常,Django类有很多钩子,所以你可以在那里插入你的自定义逻辑.
在这里,您只是隐藏输入,但任何拥有不错浏览器的人都可以修改此值并True在published输入中发布.