【问题标题】:Do I use a Wagtail form or a Django one?我使用 Wagtail 表单还是 Django 表单?
【发布时间】:2017-05-23 20:45:40
【问题描述】:

我想向我的 Wagtail 网站添加一个简单的表单,这将使某些用户(可能具有适当的权限)能够创建一个新页面,概述一个游戏场景。换句话说,只是一个标题字段和一个富文本字段。

现在我已经阅读了http://docs.wagtail.io/en/v1.10.1/reference/contrib/forms 的文档,这与我所需要的很接近,除了 AbstractForm 类或类似的类似乎是为了让用户设计自己的表单,我不希望他们这样做.因此,替代方法是使用标准的 Django 表单,按照https://github.com/gasman/wagtail-form-example/commits/master 给出的“示例”。但是我觉得这没什么用。

所以我的问题是:我是否使用 Wagtail 表单(我认为)具有“正确”页面处理代码,或者我是否以某种方式将 Django 表单插入我的 Wagtail 站点并希望它集成鹡鸰的东西好吗?

或者,我可以简单地使用 Wagtail 表单并禁止用户修改它吗?


经过反思,我需要做的(我认为)就是定义一个新的 Page 类型!这将是一种形式,我通过检查演示中的“创建事件”页面的来源确认了这一点。

我仍然需要一个链接/按钮来调用相关模型的实例,但这应该不是问题。

正如我之前指出的,这主要是由于我对 Wagtail 的无知,但不知何故,IMO 对 Wagtail 的使用没有很好的解释。

【问题讨论】:

    标签: django forms wagtail


    【解决方案1】:

    我建议使用 Wagtail 表格,原因如下;

    • 开箱即用的强大支持,轻松报告提交和电子邮件警报。
    • 围绕为表单页面和响应页面构建视图的优秀文档,此外,您还可以向 form_page 模型添加一些不错的内容,例如介绍段落。
    • 您提到的更好的页面处理,无需解决如何将表单页面放入现有网站结构中。
    • 普通页面的所有好处,例如搜索、修订/草稿、现有和使用现有视图。

    即使您可能只(作为超级管理员)创建一个表单(游戏场景),它仍然是值得的。

    查看您网站的任何人都可以查看创建的页面(或通过页面权限有权查看该页面)。

    您还可以按照此处的说明记录提交表单的用户:

    http://docs.wagtail.io/en/v1.10.1/reference/contrib/forms/customisation.html#custom-form-submission-model

    关于如何编辑权限的说明,使具有管理员权限的用户无法编辑表单结构:

    http://docs.wagtail.io/en/v1.10.1/topics/permissions.html

    附加信息

    为了未来的观众,回复您的问题/cmets;

    • 提交的数据存储 所有表单提交(也称为响应)都存储在一个表单中。 作为 Wagtail 表单模块的一部分的提交表。如果您需要扩展基本功能,您可以定义自己的表单提交表。

    • 为什么没有 Django 表单的页面包装器? 我不确定这一点,主要原因可能是提供基本的用户定义表单作为 Wagtail 管理 UI 的一部分。在内部,Django 表单字段被使用,但动态定义,提交存储为 JSON。目的再次是拥有简单的用户定义表单。

    • 创建页面类型。 是的,这就是 Wagtail 处理表单问题的方式,表单只是一个页面。此表单页面可以存在于页面继承中您想要的任何位置。这与例如 Snippets 不同,Snippets 是与 Pages 分开使用的模型。

    • 链接到表单页面 由于每个表单页面也只是一个页面,因此您可以在任何可以链接页面的地方创建指向它的链接。

    【讨论】:

    • 感谢您的回复,但我仍然认为 Wagtail 可以在此处进行一些改进。例如,我不清楚提交的数据将如何保存在数据库中,或者为什么标准 Django 表单没有简单的页面包装器。部分问题是我对 Django 不太熟悉,更不用说 Wagtail 了!
    • 嘿,有一段时间了,但我想我会回答的。提交的数据保存在一个单独的表中,模型名为 FormSubmissions(假设您遵循默认说明)在一个 json-ish 字段中(Django 不支持所有 dbs 的 json 字段,因此它必须是通用文本)。没有简单的包装器,因为它不允许用户在 Wagtail 的管理员中轻松编辑表单。最后 - 如果您需要 Django 表单的强大功能,最好使用它而不是 Wagtail 表单。文档解释说,此功能并非旨在替代 Django 表单。
    【解决方案2】:

    我只是偶然发现了相同的选择,并且 wagtail 文档指出:

    wagtailforms 不能替代 Django 的表单支持。这是 设计为页面作者构建通用数据的一种方式 无需编写代码即可收集表单。如果你打算建 将特定行为分配给各个字段的表单(例如 创建用户帐户),或需要自定义 HTML 布局,您将 几乎可以肯定,标准的 Django 表单会更好地提供服务,其中 字段在代码中是固定的,而不是由页面动态定义的 作者。

    所以这真的取决于你的需要。

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      相关资源
      最近更新 更多