Python 扩展django表单

Python 扩展django表单,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我在文档中读到了这方面的内容,但什么也找不到 您是否建议在Django中扩展自定义表单 这是我的问题。我正在用Biblion写一个博客应用程序。问题是我不想使用默认行为(从管理站点创建博客帖子)。有这样一个表单:它有自定义逻辑来保存帖子(并进行一些解析) 我想将此表单扩展为一些自定义操作。例如,我想让一些用户创建博客帖子,但不允许他们发布。相反,我应该检查并调节它们。因此,出于这个原因,我正在尝试以下方法: class PostForm(AdminPostForm): publish =

我在文档中读到了这方面的内容,但什么也找不到

您是否建议在Django中扩展自定义表单

这是我的问题。我正在用Biblion写一个博客应用程序。问题是我不想使用默认行为(从管理站点创建博客帖子)。有这样一个表单:它有自定义逻辑来保存帖子(并进行一些解析)

我想将此表单扩展为一些自定义操作。例如,我想让一些用户创建博客帖子,但不允许他们发布。相反,我应该检查并调节它们。因此,出于这个原因,我正在尝试以下方法:

class PostForm(AdminPostForm):
    publish = forms.BooleanField(
        required = False,
        widget = forms.HiddenInput # don't show it
    )
它现在可以工作了,但我想问你们是否还有其他选择(我可以阻止它显示在我的模板中,迭代表单文件,但不太喜欢这个选项)

另一种选择是从
AdminPostForm
复制/粘贴代码,但是,这似乎也不是一个好的选择。但是,如果没有简单的方法来定制几个案例的表单,我就这么做

想法

谢谢

扩展模型管理员 如果要在表单中实现每个用户的逻辑,您可能需要扩展
ModelAdmin
,而不是表单

在这里,您希望覆盖
ModelAdmin
save\u form
方法。
save_form
将3个参数添加到
self
请求、表单、更改
。您将执行以下操作:

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类有很多钩子,因此您可以在那里插入自定义逻辑

你为什么要这么做? 在这里,您只是隐藏了输入,但是任何一个拥有良好浏览器的人都可以修改此值,并在您发布的输入中发布
True

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

在这里,您希望覆盖
ModelAdmin
save\u form
方法。
save_form
将3个参数添加到
self
请求、表单、更改
。您将执行以下操作:

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类有很多钩子,因此您可以在那里插入自定义逻辑

你为什么要这么做? 在这里,您只是隐藏了输入,但是任何一个拥有良好浏览器的人都可以修改此值,并在您发布的输入中发布
True

我想将此表单扩展为一些自定义操作

停在那里

表单没有“动作”。表单仅用于验证输入。ModelForms包含一个用于保存有效输入的扩展。重点是验证输入

如果您想要“操作”,您应该编写视图函数

您可能还需要创建自定义管理操作(而不是表单)

如果要从中删除项目,请执行此操作

  • 使用ModelForm

  • 在“排除”值中列出字段

  • 我想将此表单扩展为一些自定义操作

    停在那里

    表单没有“动作”。表单仅用于验证输入。ModelForms包含一个用于保存有效输入的扩展。重点是验证输入

    如果您想要“操作”,您应该编写视图函数

    您可能还需要创建自定义管理操作(而不是表单)

    如果要从中删除项目,请执行此操作

  • 使用ModelForm

  • 在“排除”值中列出字段


  • “只不过是验证输入而已。”事实并非如此——例如,ModelForms用于模型检索和更新。@Marcin:While true;令人困惑的原因是试图让表单做得太多。“只做验证输入而已。”事实并非如此——例如,模型表单用于模型检索和更新。@Marcin:While-true;混淆的根源是试图让表单做得太多。+1隐藏字段与阻止它被更改是不同的。我知道这是不同的。但我会改变我的看法。不管怎样,谢谢。+1隐藏字段和阻止它被更改是不一样的。我知道这是不一样的。但我会改变我的看法。无论如何,谢谢你。