我使用 Wagtail 表单还是 Django 表单?

Do I use a Wagtail form or a Django one?

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

现在我已经阅读了 http://docs.wagtail.io/en/v1.10.1/reference/contrib/forms, which is close to what I need, except that the AbstractForm class or the like appears to be geared towards letting users design their own forms, which I do not want them to do. So the alternative is to use a standard Django form, as per the 'example' given at https://github.com/gasman/wagtail-form-example/commits/master 上的文档。但是我觉得这没什么用。

所以我的问题是:我是使用 Wagtail 表单(我假设)有 'correct' page-handling 代码,还是我以某种方式 shoe-horn Django 表单我的 Wagtail 网站并希望它与 Wagtail 的东西很好地结合?

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


反思一下,我需要做的(我认为)就是定义一个新的 Page 类型!这将是一种形式,我已经通过检查演示中 'Create Event' 页面的来源来确认。

我仍然需要 link/button 来调用相关模型的实例,但这应该不是问题。

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

我建议使用 Wagtail 形式,原因如下;

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

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

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

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

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

附加信息

回复您的questions/comments,为了以后的观众;

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

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

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

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

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

wagtailforms is not a replacement for Django’s form support. It is designed as a way for page authors to build general-purpose data collection forms without having to write code. If you intend to build a form that assigns specific behaviour to individual fields (such as creating user accounts), or needs a custom HTML layout, you will almost certainly be better served by a standard Django form, where the fields are fixed in code rather than defined on-the-fly by a page author.

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