Django ModelForm 日期验证
Posted
技术标签:
【中文标题】Django ModelForm 日期验证【英文标题】:Django ModelForm Date Validation 【发布时间】:2013-11-26 12:22:33 【问题描述】:使用默认的 DateField() 验证,您可以使用几种不同的格式来插入月、日和年。但是,我需要允许用户只输入年份或月份、日期和年份。
例如,在同一字段中,您可以插入“5/10/2003”或“2003”,验证将通过。另外,如果插入了“2003”,是否只需将其默认为“1/1/2003”(或类似的)还是有更好的方法来做到这一点?
最后,这可以通过覆盖 clean() 方法在模型中完成,这样我就不必跨多个表单重用代码了吗?即:
class Project(models.Model):
name = models.CharField(max_length=100)
start_date = models.DateField()
## other fields
def clean(self):
# clean other fields as normal
# override start_date
或者它应该看起来像这样:
def validate_date(value):
""" Validate date to allow YYYY """
## Raise error on Validation fail
class Project(models.Model):
name = models.CharField(max_length=100)
start_date = models.DateField()
## other fields
def clean(self):
# clean other fields as normal
# override start_date
【问题讨论】:
不确定这是否有效,但值得一试 - docs.djangoproject.com/en/dev/ref/settings/… 将DATE_FORMAT
设置更改为您想要的
【参考方案1】:
documentation on creating custom form fields 很稀疏,但有可能。
from django import forms
class MonthDateYearOrYearField(forms.DateField):
def clean(self, value):
date_length = len(value)
if date_length == 4: # 2003
value = '1/1/year'.format(year=value)
elif 8 <= date_length <= 10: # 5/10/2003, 05/10/2003, 5/9/2009
pass
else:
raise forms.ValidationError('date format must be "MM/DD/YYYY" or "YYYY"')
return super(MonthDateYearOrYearField, self).clean(value)
class Project(forms.Form):
start_date = MonthDateYearOrYearField()
elif
条件可能需要一些工作,但你明白了。
【讨论】:
谢谢,等我回去工作一定会试一试的!似乎这就是我一直在寻找的东西以上是关于Django ModelForm 日期验证的主要内容,如果未能解决你的问题,请参考以下文章