我希望允许在DateField中输入不带年份的日期,以表示实际年份。像"10.6."应该是指2021年6月10日,因为在撰写本文时已经是2021年了。下面的DATE_INPUT_FORMATS并没有将其删除:
DATE_INPUT_FORMATS = ('%d.%m.%y', '%d.%m.%Y', '%Y-%m-%d', '%d.%m.')这确实允许这样的输入,但年份将是6月10日0000;这不是我的目标。
有什么建议吗?
发布于 2021-06-10 14:42:34
一种更健壮的解决方案仍然可以接受1900年作为有效的输入,那就是覆盖表单DateField本身。虽然这附带了一个警告,即您不能轻松地与我们可以在设置中设置的输入格式集成,因此如果您想要格式本地化,这并不是很合适:
import datetime
from django import forms
from django.core.exceptions import ValidationError
class YearOptionalDateField(forms.DateField):
yearless_formats = ['%d.%m.']
def to_python(self, value):
try:
return super().to_python(value)
except ValidationError:
value = value.strip()
for format in self.yearless_formats:
try:
date = self.strptime(value, format)
return date.replace(year=datetime.datetime.now().year)
except (ValueError, TypeError):
continue
raise
class YourForm(forms.Form):
date = YearOptionalDateField()
# Test
form = YourForm({'date': '10.6.'})
print(form.is_valid()) # True
print(form.cleaned_data['date']) # 2021-06-10注意:删除'%d.%m.'和DATE_INPUT_FORMATS中可能存在的任何类似格式才能正常工作。
https://stackoverflow.com/questions/67915684
复制相似问题