如何使用GET方法从表单获取数据?
例如,我有这种形式:
class LoansSearchForm(forms.Form):
balance = forms.IntegerField(label='', required=False)
在我的视图中,表单模板以这种方式显示:
def search_results(request):
form = LoansSearchForm(request.GET)
cd = form.cleaned_data
word = cd['balance']
context = {'form': form,
'test': word,}
return render(request, 'search_results.html', context)
但是我仍然是一个错误:
'LoansSearchForm' object has no attribute 'cleaned_data'
尝试以这种方式获取它们时:
word = form['balance']
我收到一个包含完整数据的字段。如何正确地从表单中获取数据?
我的表格书写正确吗?我应该使用类似的东西吗? (很抱歉,如果我的问题很琐碎,但是我发现有关GET表单的信息很少)
if request.method == 'GET':
form = LoansSearchForm(request.GET)
if form.is_valid():
print('Hello World')
else:
form = LoansSearchForm()
答案 0 :(得分:2)
def search_results(request):
form = LoansSearchForm(request.GET)
cd = form.cleaned_data # here <------
word = cd['balance']
context = {'form': form,
'test': word,}
return render(request, 'search_results.html', context)
您的代码存在的问题是,表单没有在初始化时填充,而是在您调用form.is_valid
时,如果表单确实有效,则将填充cleaned_data
您可以详细了解相关的documentation。
答案 1 :(得分:2)
推荐:运行form.is_valid()
,然后执行form.cleaned_data
def search_results(request):
form = LoansSearchForm(request.GET)
if form.is_valid():
cd = form.cleaned_data
word = cd['balance']
else:
word = None
context = {'form': form,
'test': word,}
return render(request, 'search_results.html', context)
仅在调用
cleaned_data
并且您没有在任何地方调用它时,表单才获得is_valid()
属性。
有关清除的数据的更多信息-documentation
答案 2 :(得分:0)
我使用了name = form.data ['field_name'],认为它回答了您在提交时获取表单值的答案。