2010-01-22 82 views
0

我有这种说法功能:Django窗体:我如何显示最初的空白窗体?

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

回答

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__方法,但你不必。