2010-01-22 4 views
0

J'ai cette fonction de vue:Formats Django: comment afficher le formulaire vierge initial?

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}) 

Je pense que lorsque la page charge l'instruction else sera exécutée avec le formulaire vierge initial. Mais ce n'est pas le cas. Pour avoir la forme affichée au départ, je dois l'ajouter à l'intérieur de la première 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}) 

Pouvez-vous aider pourquoi le premier if est jamais faux? Je vous remercie.

La fonction d'affichage entier est here

Répondre

1

Lorsque vous publiez un formulaire avec method=GET vous ne changez pas en fait la méthode de la demande initiale: il était method=GET aussi.

Vous pouvez utiliser method=POST dans votre forme et votre déclaration vérifiera si pour cela, ou vous pouvez vérifier l'existence des champs requis, first_name, last_name ou les deux, votre formulaire exige.

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

Vous voudrez peut-être abstraite ce dans la forme elle-même, modifier la méthode __init__, mais vous ne devez pas.

Questions connexes