2011-05-08 4 views

cevap

20

O bunu yaparsanız bir bağlı formda() .is_valid çağırmadan önce, bir AttributeError yükseltecektir girdi değerlerini geçirmeden önce bir formun .cleaned_data özellik kullanmak gerekli değildir ya Bağlanmamış bir formda erişmeye çalışırsanız, read more about Form.cleaned_data.

Ayrıca, üzerinde lojik senin görünümlerinde

, form kullanarak gereken geleneksel bir şekilde saklanması amacıyla bir formu yönteminde formun veri soyut kullanımı için iyi bir fikir genellikle böyle olduğunu:

formunuzdaki
if request.method == 'POST': 
    form = MyForm(request.POST) # Pass the resuest's POST/GET data 
    if form.is_valid():   # invoke .is_valid 
    form.process() # look how I don't access .cleaned_data in the view 

: Eğer aramadan önce `cleaned_data` erişmeye çalışırsanız Django bir AttributeError yükseltecek söz için

class MyForm(forms.Form): 
    my_field = forms.CharField() 

    def process(self): 
    # Assumes .cleaned_data exists because this method is always invoked after .is_valid(), otherwise will raise AttributeError 
    cd = self.cleaned_data 
    # do something interesting with your data in cd 
    # At this point, .cleaned_data has been used _after_ passing the POST/GET as form's data 
+0

+1' is_valid() 'Eğlenceli gerçek: hala bu 6 y yapar kulaklar daha sonra ... – pentix

+0

@pentix Yip. Sizce belki de FormNotValidated hatası kullanmış olabilirler? – Derek

1

is_valid() öğesi bir kez True değerini döndürdüğünde, form gönderiminizin güvenliğini, formunuz tarafından tanımlanan doğrulama kurallarına uygun olduğu bilgisiyle işleyebilirsiniz. Request.POST doğrudan bu noktada erişebilir iken, form.cleaned_data erişmek için daha iyidir. Bu veriler sadece doğrulanmış değil, aynı zamanda sizin için ilgili Python türlerine de dönüştürülecektir.

Processing the data from a form