我遇到了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个表单,所以我认为它不会有任何用处。
答案 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>