首页 > 解决方案 > clean_data 中的有效 POST 参数值为空

问题描述

当通过我的表单发布数据时,一些字段变为空,None或者''cleaned_data. 它们被正确传递并且仍然存在于request.POST. 例如:

表格.py

class NotificationForm(forms.ModelForm):
    WEEKDAY_OPTIONS = no_chosen_day + [
        (i, v)
        for i, v in enumerate(calendar.day_name)
    ]
    schedule_weekday = forms.ChoiceField(
        choices=WEEKDAY_OPTIONS,
        label="Day of the week",
        disabled=True,
        required=False,
    )

    def clean_schedule_weekday(self):
        __import__('pprint').pprint(self.cleaned_data)

模型.py

class Notification(models.Model):
    notification_id = models.AutoField(primary_key=True)
    schedule_weekday = models.SmallIntegerField(blank=False, null=False)

中没有其他清洁方法forms.py。方法中的字段值已经为空clean_schedule_weekday

{'schedule_weekday': '',}

虽然打印出来request.POST仍然views.py给出:

{'csrfmiddlewaretoken': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
 'schedule_weekday': '0'}

为什么?

标签: pythondjangodjango-modelsdjango-forms

解决方案


事实证明,原因是我设置disabled=True了在类 vars 中定义字段的位置。相反,它必须设置在___init__()

self.fields['schedule_weekday'].widget.attrs['disabled'] = True

推荐阅读