gpt4 book ai didi

python - Django Forms 中日期字段的清理方法

转载 作者:行者123 更新时间:2023-11-28 21:54:39 25 4
gpt4 key购买 nike

我需要覆盖 Django 表单的 clean() 方法来一起测试两个日期字段:begin_date 和 end_date(结束日期晚于开始日期,开始日期晚于到现在)。

问题是当这两个字段之一为空或无效时,我得到一个异常(KeyError)。我想要一个简单的错误表单,就像我用空字符字段得到的一样。

我很确定能在这里找到答案:Django self.cleaned_data Keyerror但我没有。

代码如下:

class MyForm(forms.Form):
begin_date = forms.DateField()
end_date = forms.DateField()
#...

def clean(self):

cleaned_data = super(MyForm, self).clean()
errors = []

begin_date = cleaned_data['begin_date']
end_date = cleaned_data['end_date']
#...

# Test 1
if begin_date < date.today():
errors.append(forms.ValidationError(
"La date de début doit être postérieure à la date actuelle"))
# Test 2
if end_date < begin_date:
errors.append(forms.ValidationError(
"La date de fin doit être posétieure à la date de début"))

if errors:
raise forms.ValidationError(errors)

return cleaned_data

最佳答案

在 Django 中,当您调用 super(MyForm, self).clean() 时,父类(super class)仅在数据已经有效时才填充 cleaned_data 这就是文档中使用 get 方法 ( https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other )。

因为您不想将 datetime 对象放在一起比较,请使用此代码确保日期字段正确:

if 'begin_date' in cleaned_data.keys():
begin_date = cleaned_data['begin_date']
else:
begin_date = None
errors.append(forms.ValidationError(
"Bad start date format or empty"))

关于python - Django Forms 中日期字段的清理方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23900432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com