【发布时间】:2017-03-06 20:26:32
【问题描述】:
我的表单允许在表单中提交多个“步骤”。这些步骤是通过 JavaScript 按下表单上的按钮来添加的。
问题在于 django 表单及其验证:
class TaskForm(forms.Form):
task_name = forms.CharField
step_number = forms.IntegerField(widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
step_fields = kwargs.get('step_number', 0)
super(TaskForm, self).__init__(*args, **kwargs)
self.fields['step_number'].initial = step_fields
for index in range(int(step_fields)):
self.fields['step_field_{index}'.format(index=index)] = forms.CharField()
这会在页面首次加载时创建带有任务名称作为唯一输入字段的表单。这是意料之中的。
我通过浏览器将步骤添加到我的任务中,这工作正常并且隐藏字段正在递增。
然后我提交,但我收到错误:
'task-app/create-task.html' 处的类型错误
__ init__() 得到了一个意外的关键字参数“step_number”
很明显,关键字参数来自views.py:
def add_task(request):
if request.user.is_authenticated():
if request.method == 'POST':
form = TaskForm(request.POST, step_number=request.POST.get('step_number'))
if form.is_valid():
# do something with the form
create_task(form)
messages.success(request, "The task form was valid")
return redirect('task-app:homepage')
else:
messages.warning(request, "The form is not valid")
return render(request, 'task-app/create-task.html', {'form':form})
else:
form = TaskForm()
return render(request, 'task-app/create-task.html', {'form':form})
【问题讨论】:
标签: django django-forms django-views