我有这个视图功能:
def search(request):
if request.method == 'GET':
form = SearchForm(request.GET)
if form.is_valid():
last_name = form.cleaned_data['last_name']
first_name = form.cleaned_data['first_name']
lawyers = Lawyer.objects.all()
[ other if statements ]
....
else:
form = SearchForm()
return render_to_response('search.html', {'form': form})
我认为当页面加载时,else
语句将以初始空白表单执行。但这种情况并非如此。要最初显示表单,我必须将其添加到第一个if
:
def search(request):
if request.method == 'GET':
form = SearchForm(request.GET)
if form.is_valid():
last_name = form.cleaned_data['last_name']
first_name = form.cleaned_data['first_name']
lawyers = Lawyer.objects.all()
[ other if statements ]
....
form = SearchForm()
return render_to_response('search.html', {'form': form})
else:
form = SearchForm()
return render_to_response('search.html', {'form': form})
你能帮助为什么第一个if
永远不会错误吗?谢谢。
整个视图功能为here
答案 0 :(得分:2)
每个正常的HTTP请求(例如,当您转到http://stackoverflow.com时)都是GET请求。在更改某些数据时,使用POST作为表单的方法通常是个好主意。
答案 1 :(得分:1)
当您发布包含method=GET
的表单时,您实际上并未从初始请求更改该方法:它也是method=GET
。
您可以在表单中使用method=POST
,if语句也会检查,或者您可以检查是否存在必填字段first_name
,last_name
或两者都有,正如你的表格所要求的那样。
if 'first_name' in request.GET or 'last_name' in request.GET:
form = SearchForm(request.GET)
else:
form = SearchForm()
您可能希望将此抽象为表单本身,修改__init__
方法,但您不必这样做。