django - 额外字段不在 Django Modelform 的已清理数据中
问题描述
我有ModelForm
一些额外的字段。我已clean()
覆盖此表单的功能,但无法访问cleaned_data
. 验证下面的表单时,在倒数第二行data.get('startDate')
返回,因为它在清理的数据中None
没有找到。startDate
## Model ##
class Reservation(models.Model):
groupName = models.CharField(max_length=64)
email = models.EmailField()
comments = models.TextField(null=True, blank=True)
## Form ###
class ReservationForm(forms.ModelForm):
startDate = forms.DateField(widget=forms.SelectDateWidget)
endDate = forms.DateField(widget=forms.SelectDateWidget)
class Meta:
model = Reservation
fields = [
'groupName',
'email',
'startDate',
'endDate',
'comments'
]
def clean_startDate(self):
data = self.cleaned_data['startDate']
if data < datetime.date.today():
raise forms.ValidationError('Pick a date in the future')
return data
def clean(self):
data = super().clean()
if data.get('startDate') > data.get('endDate')
raise forms.ValidationError('End date must be after start date.')
解决方案
我测试这个的方式,startDate 默认为今年一月一日。这意味着 clean_startDate(self) 会引发 ValidationError 并且不会返回数据 (startDate)。因为所有的 clean_fieldname() 方法都是在 clean() 之前调用的,所以 startDate 在 clean() 函数的 clean_data 中不会有“清理值”。
推荐阅读
- webdriver-io - Webdriverio 6 - 如何右键单击 X 和 Y 位置
- python - 用 16 位图像训练 keras ResNet50V2?
- python - 将 PIL.Image 转换为 skimage
- oracle - 如何在oracle-sql中计算本周每天的待处理票总数?
- javascript - 警告:React 无法识别 DOM 元素上的 `isNarrow` 属性 - Material UI 组件
- ios - 如果设备不做广告,如何获取蓝牙设备名称
- html - 将 HTML 表转换为 Excel:公式
- android - Nativescript 蓝牙和蓝牙 v5.0
- python - Wolfram Alpha 应用程序编程接口不工作
- azure - 无法使用 Azure DevOps 拉取请求排队生成错误