我有一个日期,传递为 2019-01-01T00:02
。我的目标是用空格替换 T,2019-01-01 00:02
。
使用 Form,我验证该字段和其他一些字段。'
klientForm = KlientForm(json.loads(request.body.decode()))
bokningForm = BokningForm(json.loads(request.body.decode()))
if klientForm.is_valid() and bokningForm.is_valid():
#Save model, etc.
我正在使用 DateTimeField
,它不会接受日期,除非我像上面那样更改它。我实现了自己的 clean() 方法,
def clean(self):
cleaned_data = super(BokningForm, self).clean()
pumpStart = self.data['pumpStart']
pumpStart = pumpStart.replace("T", " ")
cleaned_data['pumpStart'] = datetime.strptime(pumpStart, "%Y-%m-%d %H:%M")
return cleaned_data
这成功地将它转换为日期时间对象,我使用 print(cleaned_data)
进行了检查
我的问题是数据返回晚了,因为(我认为)bokningForm.is_valid()
已经失败,导致模型未保存。
我尝试使用 clean_pumpStart(self):
作为 Django Forms但是当 bokningForm.is_valid()
失败时没有调用该函数,导致与上述相同的问题。
感谢任何帮助!
最佳答案
您不需要执行任何这些操作。相反,您应该重新定义字段本身,提供 input_formats
属性:
class BokningForm(forms.ModelForm):
pumpStart = forms.DateTimeField(input_formats=['%Y-%m-%dT%H:%M:%S'])
...
现在 Django 将自动转换该值作为其自身验证过程的一部分。
请注意,如果您正在做的是验证 JSON,您可能希望使用 Django REST Framework 及其序列化程序,而不是普通的 Django 表单。
关于python - 更改 Django 表单中的字段,覆盖 clean(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326314/