Django 模型验证日期和日期时间范围
Django model validate date and datetime ranges
在 Django 模型中验证日期和日期时间间隔的最佳解决方案是什么?
这是我的模型:
class PriceOption(Model):
from_datetime = DateTimeField(verbose_name=_('from datetime'))
to_datetime = DateTimeField(verbose_name=_('to datetime'))
from_time = TimeField(verbose_name=_('from time'))
to_time = TimeField(verbose_name=_('to time'))
而且我需要确保 from_datetime 发生在 to_datetime 之前,from_time 和 to_time 也是如此。
我应该覆盖保存方法吗?或者以某种方式验证器?
我看到 Postgres 有日期和日期时间范围字段。这只会解决第一对字段。
最好使用表格来验证时间范围,表格已经内置函数clean()
来满足您的需要:
class PriceOptionForm(forms.ModelForm):
# some normal ModelForm setup goes here
def clean(self):
cleaned_data = super(PriceOptionForm, self).clean()
from_time = cleaned_data.get("from_time")
end_time = cleaned_data.get("end_time")
if from_time and end_time:
if end_time < from_time:
raise forms.ValidationError("End time cannot be earlier than start time!")
return cleaned_data
在 Django 模型中验证日期和日期时间间隔的最佳解决方案是什么?
这是我的模型:
class PriceOption(Model):
from_datetime = DateTimeField(verbose_name=_('from datetime'))
to_datetime = DateTimeField(verbose_name=_('to datetime'))
from_time = TimeField(verbose_name=_('from time'))
to_time = TimeField(verbose_name=_('to time'))
而且我需要确保 from_datetime 发生在 to_datetime 之前,from_time 和 to_time 也是如此。
我应该覆盖保存方法吗?或者以某种方式验证器?
我看到 Postgres 有日期和日期时间范围字段。这只会解决第一对字段。
最好使用表格来验证时间范围,表格已经内置函数clean()
来满足您的需要:
class PriceOptionForm(forms.ModelForm):
# some normal ModelForm setup goes here
def clean(self):
cleaned_data = super(PriceOptionForm, self).clean()
from_time = cleaned_data.get("from_time")
end_time = cleaned_data.get("end_time")
if from_time and end_time:
if end_time < from_time:
raise forms.ValidationError("End time cannot be earlier than start time!")
return cleaned_data