2013-04-11 4 views
10

ではありません。この私の形式である:Djangoのform.cleaned_dataはなし

event_form = EventForm(request.POST) 
if event_form.is_valid(): 
    event = events_api.save_event_from_form(request.user, address, event_form.cleaned_data) 

しかし、私はNoneとしてevent_form.cleaned_dataを取得しています:

class EventForm(forms.Form): 
    start_date  = forms.CharField(required=True, widget=forms.TextInput(attrs={'class': 'span6 as-date'})) 
    end_date   = forms.CharField(required=True, widget=forms.TimeInput(attrs={'class': 'span6 as-date'})) 
    title   = forms.CharField(required=True, widget=forms.TextInput(attrs={'class': 'span8'})) 
    description  = forms.CharField(required=True, widget=forms.Textarea(attrs={'rows': 4, 'class': 'span8'})) 
    total_seats  = forms.IntegerField(required=True, widget=forms.TextInput(attrs={'class': 'span6'})) 
    buffer_seats  = forms.IntegerField(required=True, widget=forms.TextInput(attrs={'class': 'span6'})) 
    seat_cost  = forms.IntegerField(required=True, widget=forms.TextInput(attrs={'class': 'span8'})) 
    published  = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class': 'span6'})) 
    verified_booking = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class': 'span6'})) 

def clean(self): 
    try: 
     self.cleaned_data['start_date'] = datetime.strptime(self.cleaned_data['start_date'], '%Y/%m/%d %H:%M') 
    except ValueError: 
     raise forms.ValidationError('Improper start date') 
    try: 
     self.cleaned_data['end_date'] = datetime.strptime(self.cleaned_data['end_date'], '%Y/%m/%d %H:%M') 
    except ValueError: 
     raise forms.ValidationError('Improper end date') 
    if self.cleaned_data['buffer_seats'] >= self.cleaned_data['total_seats']: 
     raise forms.ValidationError('Seats buffered can not be same or greater than total seats') 
    if self.cleaned_data['start_date'] >= self.cleaned_data['end_date']: 
     raise forms.ValidationError('Event start date can not be greater than end date') 
    if self.cleaned_data['published'] == 'on': 
     self.cleaned_data['published'] = True 
    else: 
     self.cleaned_data['published'] = False 
    if self.cleaned_data['verified_booking'] == 'on': 
     self.cleaned_data['verified_booking'] = True 
    else: 
     self.cleaned_data['verified_booking'] = False 

ここでビューです。私は何が欠けていますか?

+6

あなたのclean()メソッドで 'return'を忘れました – catherine

答えて

16

form.clean() return cleaned_dataです。標準的な実装は次のとおりです

class MyForm(forms.Form): 
    # ... 
    def clean(self): 
     cleaned_data = super(MyForm, self).clean() 
     # do your custom validations/transformations here 
     # and some more 
     return cleaned_data 
+0

ああ..ありがとう!今それは動作します:) – Shwetanka

関連する問題