Django 选择DateWidget:在日期错误的情况下替换日期
Django 1.11 问题是:如果一个月内没有一天,用户将收到验证错误:“输入有效日期” 在发生此验证错误之前,我想使用此函数:Django 选择DateWidget:在日期错误的情况下替换日期,django,Django,Django 1.11 问题是:如果一个月内没有一天,用户将收到验证错误:“输入有效日期” 在发生此验证错误之前,我想使用此函数: def ceil_day(year, month, day): __weekday, number_of_days_in_month = calendar.monthrange(year, month) return min(day, number_of_days_in_month) 换句话说,我想替换日期:如果用户输入一个不存在的日期,就让它成为
def ceil_day(year, month, day):
__weekday, number_of_days_in_month = calendar.monthrange(year, month)
return min(day, number_of_days_in_month)
换句话说,我想替换日期:如果用户输入一个不存在的日期,就让它成为当月的最后一天
你能帮我理解怎么做吗
您可以通过实现clean()方法来实现这一点,如下所示:
class FrameDateForm(ModelForm):
def clean(self):
super(ModelForm, self).clean()
day = int(self.data.get('from_date_day', 0))
month = int(self.data.get('from_date_month', 0))
year = int(self.data.get('from_date_year', 0))
if day and year and month:
self.cleaned_data['from_date'] = datetime.date(
year, month, ceil_day(year, month, day))
if 'from_date' in self._errors:
del self._errors['from_date']
return self.cleaned_data
clean()方法总是在表单验证时被调用。因此,我们可以预期ceil_day()始终应用于from_date字段。如果不存在日期错误,我们需要在返回之前清除from_date字段的错误 我添加了clean方法。什么也没变。我在其中放置了一个断点,调试器不会停止。我认为,甚至在验证之前,他们就试图利用手头的信息建立一个日期。当然,出现了异常。这意味着调试器没有到达clean()方法,因为引发了异常?您能分享异常的详细信息(堆栈跟踪)吗?(在我的测试中,我没有观察到任何异常,代码段按预期工作。)
class FrameDateForm(ModelForm):
def clean(self):
super(ModelForm, self).clean()
day = int(self.data.get('from_date_day', 0))
month = int(self.data.get('from_date_month', 0))
year = int(self.data.get('from_date_year', 0))
if day and year and month:
self.cleaned_data['from_date'] = datetime.date(
year, month, ceil_day(year, month, day))
if 'from_date' in self._errors:
del self._errors['from_date']
return self.cleaned_data