Django表单:如何显示初始空白表单?

时间:2010-01-22 18:56:44

标签: python django-forms

我有这个视图功能:

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

2 个答案:

答案 0 :(得分:2)

每个正常的HTTP请求(例如,当您转到http://stackoverflow.com时)都是GET请求。在更改某些数据时,使用POST作为表单的方法通常是个好主意。

您应该阅读:When do you use POST and when do you use GET?

答案 1 :(得分:1)

当您发布包含method=GET的表单时,您实际上并未从初始请求更改该方法:它也是method=GET

您可以在表单中使用method=POST,if语句也会检查,或者您可以检查是否存在必填字段first_namelast_name或两者都有,正如你的表格所要求的那样。

if 'first_name' in request.GET or 'last_name' in request.GET:
    form = SearchForm(request.GET)
else:
    form = SearchForm()

您可能希望将此抽象为表单本身,修改__init__方法,但您不必这样做。