Django 模型验证日期和日期时间范围

2024-03-18

在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 模型验证日期和日期时间范围 的相关文章

随机推荐