2011-11-11 15 views
10

Próbuję wygenerować formularz za pomocą dokumentacji django. Ja stale otrzymuję błąd:obiekt formularza nie ma atrybutu "cleaned_data"

'TestForm' object has no attribute 'cleaned_data' 

chociaż form.is_valid jest True (drukuje „forma jest ważna” linia mojego kodu). Poniżej znajdują się odpowiednie fragmenty mojego kodu.

urls.py

url(r'^test/',views.test), 

forms.py

from django import forms 
class TestForm(forms.Form): 
    name = forms.CharField() 

views.py

def test(request): 
    if request.method == 'POST': 
     form = TestForm(request.POST) 
     if form.is_valid: 
      print 'form is valid' 
      print form.cleaned_data      
     else: 
      print 'form not valid' 
    else: 
     form = TestForm() 

    return render_to_response('User/Test.html',{'form': form},context_instance=RequestContext(request)) 

test.html

<form action="" method="post">{% csrf_token %} 
     <table> 
      {{ form.as_table }} 
     </table> 
     <input type="submit" value="Submit"> 
    </form> 

Odpowiedz

32

Nie powodują czyszczenie i walidację formularza, to jest przez wywołanie metody is_valid() (zwróć uwagę na nawiasy ()), dlatego nie trzeba czyścić dane.

Korekta:

if request.method == 'POST': 
    form = TestForm(request.POST) 
    if form.is_valid(): 
     print 'form is valid' 
     print form.cleaned_data 
    ... 
+0

, Thank u do postu, poprawiłem go is_valid(), teraz jeśli form.is_valid jest False, to wchodzi do innego części kodu. – Jisson

+0

+1 dla catch(). Miałem ten sam problem i trudną częścią jest to, że zadziałało, gdy ustawiłem punkt przerwania i przejrzałem kod, ale nie działałbym inaczej. Odgadnięcie debuggera zmusiło obiekt formularza do pełnego zapełnienia nawet bez wywołania is_valid(). – IMFletcher

+0

To dziwny system. Chciałem użyć wyczyszczonych danych, ale użyć własnego sprawdzania poprawności (ponieważ wymagało to warunkowego sprawdzania poprawności), więc musiałem wywołać funkcję is_valid(), a następnie nie używać tego, co zwraca. – Deleet