2010-10-07 15 views
0

J'ai un problème avec django. J'ai créé un formulaire dans mon application où je peux prendre les détails d'un client. Maintenant, je veux créer un formulaire qui peut me permettre d'éditer un formulaire. Cependant, j'ai quelques problèmes quand je vais dans/index/edit_client/1, j'ai cette erreur.Besoin d'aide dans la forme 'variable locale' de Django 'référencé avant affectation'

local variable 'form' referenced before assignment 

Je ne sais pas quelle est la raison pour laquelle je l'ai obtenu cette erreur, mais de ce que je l'ai regardé, il ne facilite pas les choses à moins bien sûr il y a une autre façon comment créer un formulaire de modification pour modifier la les clients forment. Voici quelques sorties qui peuvent être utiles aussi.

# urls.py 
    urlpatterns = patterns('', 
    (r'^index/$', login_required(direct_to_template), { 'template': 'index.html' }), 
    (r'^index/clients/$', client_info), 
    (r'^index/clients_details/(?P<id>\d+)/$', clients_details), 
    (r'^index/edit_client/(?P<id>\d+)/$', edit_client), 
) 

# views.py 
@login_required 
def edit_client(request, id=1): 
    clients_list = Client.objects.filter(pk=id) 
    if request.method == 'POST': 
     form = ClientForm(request.POST or None) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/index/clients/') 
     else: form = ClientForm() 
    return render_to_response('edit_client.html', {'form': form}, context_instance=RequestContext(request)) 

#edit_client.html 
{% extends "base.html" %} 

{% block content %} 
<font face="verdana,news gothic,arial,heltevica,serif"> 
    <h3>Edit Client</h3> 
</font> 
<form method= "POST" action=""> 
    <font face="verdana,news gothic,arial,heltevica,serif"> 
    <div id="form"> 
     <table> 
      {{form.as_table}} 
     </table> 
     <div align="center" STYLE=" margin-right:190px"> 
      <input type="submit" value="Submit" STYLE="background-color:#E8E8E8; color:#181818 "/> 
     </div> 
    </div> 
</form> 
{% endblock %} 

Répondre

5

Ce sera toujours courir:

return render_to_response('edit_client.html', {'form': form} 

Mais si request.method n'est pas POST, rien est affecté à form.

Code fixe:

@login_required 
def edit_client(request, id=1): 
    clients_list = Client.objects.filter(pk=id) 
    form = ClientForm() 
    if request.method == 'POST': 
     form = ClientForm(request.POST or None) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/index/clients/') 
    return render_to_response('edit_client.html', {'form': form}, context_instance=RequestContext(request)) 
+0

Eh bien, cela a fait disparaître ce message d'erreur, mais pour une raison quelconque, mes formulaires client d'édition me donne un formulaire vierge propre. Je devrais obtenir un formulaire avec des données stockées déjà que je peux ensuite changer et enregistrer. – Shehzad009

+0

il n'y a pas de gestionnaire GET, bien sûr, vous voyez un formulaire vide – leoluk

+0

J'ai fait quelque chose comme ça. – Shehzad009

1

Dans votre méthode edit_client, vous passez form dans la réponse, cependant, si la méthode était pas un POST, vous ne serez pas initialisé un form.