2017-12-28 45 views
2

Ich versucheDjango überprüfen, ob Formular is_valid()

if form.is_valid(): 

Mit dem django Formularassistenten zu replizieren. (Diese Frage nichts mit dem Assistenten zu tun)

Ich habe diesen Code:

class ContactWizard(SessionWizardView): 

def get_template_names(self): 
    return [TEMPLATES[self.steps.current]] 

def done(self, form_list, **kwargs): 
    if self.request.method == 'POST': 
     print(form_list) 
     process_form_data(form_list) 
    return HttpResponseRedirect('../home') 

def process_form_data(form_list): 
    if form.is_valid(): 
     form_data = [form.cleaned_data for form in form_list] 

     first_name = form_data[0]['first_name'] 
     last_name = form_data[0]['last_name'] 
     email = form_data[0]['email'] 

     fav_food = form_data[0]['fav_food'] 
     fav_drink = form_data[0]['fav_drink'] 

     user = User.objects.create_user(email) 
     user.first_name = first_name 
     user.last_name = last_name 
     user.email = email 
     user.save() 

     user_addon = UserAddon.objects.create(user=user,fav_food=fav_food,fav_drink=fav_drink) 
     user_addon.save() 

     return form_data 

Wenn ich form_list auszudrucken ich dieses

odict_values([<UserAddonForm bound=True, valid=True, fields=(fav_food;fav_drink;first_name,last_name;email)>,ContactForm3 bound=True, valid=True, fields=(info1;info2;message)>]) 

und wenn ich versuche, läuft es mit nur

form.is_valid() 

i erhalten

Exception Value: name 'form' is not defined 

Wie kann ich ein Äquivalent von form.is_valid() erhalten?

Dank

Antwort

2

Sie vorbei ein form_list an die Funktion process_form_data, aber die Überprüfung gegen Namen form (von form.is_valid()), die an dieser Stelle nicht existiert.

form_list Unter der Annahme ist ein iterable, können Sie über sie durchlaufen und mit den Formen der Reihe nach behandeln:

def process_form_data(form_list): 
    for form in form_list: 
     if form.is_valid(): 
      form_data = form.cleaned_data 
      first_name = form_data[0]['first_name'] 
      last_name = form_data[0]['last_name'] 
+0

Große Ihnen danken! Für den first_name, last_name, etc sollte dieser unter form_data = form.cleaned_data (wie unter dem if) eingerückt werden? oder sollte es unter dem sein? –

+1

@Midi_ Überprüfen Sie meine Änderungen. – heemayl

+0

perfect vielen Dank für Ihre Hilfe! –

Verwandte Themen