Django形式。具有相同html名称属性的字段

时间:2016-02-20 21:12:59

标签: django django-forms html-form

我遇到了django表单的问题。 我目前正在使用request.POST来验证视图中的POST。 我希望通过将整个过程移动到表单来解决一些问题。

我想做什么:
向用户显示5个输入文本。他最多可以使用javascript添加30个文本。 每个输入文本都有name ='choices []'属性。所以当我收到request.POST dict时,我只是这样做:

import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.SQLContext

val sqlContext: SQLContext = new HiveContext(sc) 

我得到了所有用户的选择。

如何用django表格实现这一点?
例如,以下形式:

from pyspark.sql import HiveContext

sqlContext = HiveContext(sc)

将在HTML中生成类似的内容:

choices = request.POST.getlist('choices[]') 

是否可以让它产生以下内容而无需亲自将其硬编码到HTML文件中?:

class MyForm(forms.Form):

    # Form fields
    title = forms.CharField()
    choice1 = forms.CharField()
    choice2 = forms.CharField()
    option = forms.ChoiceField(choices=(...))

如果是,我怎样才能处理验证?

谢谢

P.S我阅读了关于django formsets的文档,但这是关于创建多个表单,而不是1个表单,所以我认为它不会有任何用处。

1 个答案:

答案 0 :(得分:0)

您可以对form的其余部分使用常规fields,为formset使用choices

#in your forms.py
from django import forms
class MyMainForm(forms.Form):
    title = forms.CharField()

class MyChoicesForm(forms.Form):
    choice = forms.CharField()

MyChoicesFormset = forms.formset_factory(MyChoicesForm)

#in your views.py
def my_manage_view(request):
    if request.method == 'POST':
        form = MyMainForm(request.POST)
        formset = MyChoicesForm(request.POST)
        if form.is_valid() and formset.is_valid():
            # do something with the form and formset.cleaned_data
            pass
    else:
        form = MyMainForm()
        formset = MyChoicesForm()
    return render(request, 'my_manage_view.html', {
        'form': form,
        'formset': formset
    })


#in your template you can render them inside one <form> tag
<form method="post" action="">
    {{ form }}
    <table>
        {{ formset }}
    </table>
</form>