【发布时间】:2016-06-02 10:19:47
【问题描述】:
我在使用 django 表单时遇到问题。 我目前正在使用 request.POST 来验证视图中的 POST。 我想通过将整个过程移至表单来稍微解耦。
我想做什么:
向用户呈现 5 个输入文本。他可以使用 javascript 添加多达 30 条文本。
每个输入文本都有 name='choices[]' 属性。所以当我得到 request.POST 字典时,我只是这样做:
choices = request.POST.getlist('choices[]')
我得到所有用户的选择。
这如何用 django 表单实现?
比如下面的表格:
class MyForm(forms.Form):
# Form fields
title = forms.CharField()
choice1 = forms.CharField()
choice2 = forms.CharField()
option = forms.ChoiceField(choices=(...))
会在 HTML 中产生类似这样的内容:
<input name="title" type="text" />
<input name="choice1" type="text" />
<input name="choice2" type="text" />
<select name="option">
<option .... />
....
</select>
是否可以在不自己手动将其硬编码到 HTML 文件中的情况下使其生成以下内容?:
<input name="title" type="text" />
<input name="choices[]" type="text" />
<input name="choices[]" type="text" />
<select name="option">
<option .... />
....
</select>
如果是,之后我该如何处理验证?
谢谢
P.S 我阅读了有关 django 表单集的文档,但这是关于创建多个表单,而不是 1 个表单,所以我认为它没有任何用处。
【问题讨论】:
-
再次阅读
formset文档。这就是你需要的。Formset是一组forms,而不仅仅是一个form。 -
嗯,好的,我避免提及整个表单包含更多元素,而不仅仅是选择。如果我提供一个 extra=3,它将提供 3 个额外的表单,而我只需要 3 个额外的选择字段。我错过了什么吗?这也解决了名称问题吗?
-
你可以把问题分成几部分,一一解决(分而治之),看我的回答。
标签: django django-forms forms