Django form.cleaned_data为None

标签 django python-2.7 django-forms

这是我的表格:

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

这是 View :

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

但是我得到event_form.cleaned_data作为None。我想念什么?

最佳答案

form.clean() 必须返回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

关于Django form.cleaned_data为None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946979/

相关文章:

带有 500,000 个对象的 ManyToMany 字段的 Django 表单超时

python - Django-Models:TypeError:强制转换为 Unicode:需要字符串或缓冲区,用户发现

python - 在运行 Django 单元测试时,例如在 PyCharm 中,强制删除任何先前的测试数据库(autoclobber)

python - 即使属性存在,getattr() 是否总是调用现有的 __getattr__() ?

css - 如何删除由 Django 中的表单创建的输入/字段

django - 如何正确地使用 ManyToManyField 覆盖模型的 ModelForm 的 save() 方法

python - Python Django 应用程序默认打开多少个连接?

Django RQ rqworker 无限期卡住

python - 删除旧的 Python && 全新安装 Python

python - 在 python pandas 中获取剩余聚合列作为两列分组的列表