由 sysdate 相关日期验证器引起的合成/冗余 Django 迁移

Posted

技术标签:

【中文标题】由 sysdate 相关日期验证器引起的合成/冗余 Django 迁移【英文标题】:Synthetic/redundant Django migrations caused by sysdate dependent date validator 【发布时间】:2018-07-05 18:46:05 【问题描述】:

我在 Django 模型中有一个如下所示的日期字段,我希望日期在未来(或今天,但不是过去)。

foo = models.DateField('Foo', null=True,
        validators=[MinValueValidator(date.today())])

这工作正常,表单上的验证按预期进行,但是,makemigrations 每天都会在该日期运行时创建一个新迁移,下面是今天生成的示例:

field=models.DateField(null=True,
    validators=[django.core.validators.MinValueValidator(
        datetime.date(2018, 1, 26))]

我怎样才能避免这种情况?我应该使用自定义验证器而不是 MinValueValidator 还是将 clean 方法添加到 Form 子类而不是像 this?

【问题讨论】:

【参考方案1】:

没有办法避免这种情况。 你有几个选择。

编写自定义验证器。 在您的表单中编写一个 clean_fieldname 方法。 在模型上写入 pre_save 信号,确保值正确。

【讨论】:

以上是关于由 sysdate 相关日期验证器引起的合成/冗余 Django 迁移的主要内容,如果未能解决你的问题,请参考以下文章

学习一下mysql的日期相关函数(转)

用于验证文件名的 Shell 脚本

Oracle 日期操作

Oracle之trunc函数

如何生成 sysdate-30 和 sysdate+30 之间的所有日期列表?

sysdate 差异(如何在 sysdate 和我的表日期之间进行查询)