gpt4 book ai didi

python - 扩展 Django 表单

转载 作者:太空宇宙 更新时间:2023-11-03 19:21:53 24 4
gpt4 key购买 nike

我一直在文档中阅读有关此内容的内容,但找不到任何内容。

您建议在 Django 中扩展自定义表单吗?

这是我的问题。我正在使用 Biblion 编写博客应用程序。问题是我不想使用默认行为(从管理站点创建博客文章)。有这样的表格:https://github.com/eldarion/biblion/blob/master/biblion/forms.py#L13它具有自定义逻辑来保存帖子(并进行一些解析)。

我很乐意扩展此表单以执行一些自定义操作。例如,我想让一些用户创建博客帖子,但不允许他们发布。相反,我应该检查并调节它们。因此,为此我正在尝试类似的方法:

class PostForm(AdminPostForm):
publish = forms.BooleanField(
required = False,
widget = forms.HiddenInput # don't show it
)

它现在正在工作,但我想问你们是否还有其他选项(我可以阻止它显示在我的模板中,迭代表单字段,但不太喜欢这个选项)。

其他选项是仅复制/粘贴 AdminPostForm 中的代码,但是,这似乎也不是一个好的选择。但如果没有简单的方法来针对多种情况自定义表单,我就会这样做。

想法?

谢谢!!

最佳答案

扩展 ModelAdmin

如果您想在表单中实现每用户逻辑,您可能需要扩展 ModelAdmin 而不是表单。

在这里,您想要重写 ModelAdminsave_form 方法。
save_form 除了 self 之外还接受 3 个参数:请求、表单、更改。您将执行以下操作:

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

通常,Django 类有很多 Hook ,因此您可以在其中插入自定义逻辑。

你为什么要这样做?

在这里,您只是隐藏了输入,但任何拥有良好浏览器的人都可以修改此值并在您的已发布输入中发布True

关于python - 扩展 Django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9431880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com