日期验证 --> 结束日期必须大于开始日期

Con*_*559 3 django datetime

我需要编写一个脚本来验证结束日期是否大于开始日期。

此外,开始日期/结束日期不能早于当前日期。这需要在 Django 1.8 中编写。

Wil*_*sem 6

您可以为此覆盖Model.clean(..)方法 [Django-doc]。如果您使用ModelForm[Django-doc],那么它会自动调用.clean()模型实例来检查是否满足约束。

from django.db import models
from django.utils import timezone

class MyModel(models.Model):
    start = models.DateTimeField()
    end = models.DateTimeField()

    def clean(self):
        super().clean()
        if not (timezone.now() <= self.start <= self.end):
            raise ValidationError('Invalid start and end datetime')
Run Code Online (Sandbox Code Playgroud)

,您可以在以下constraints文件中使用[Django-doc]Meta

# since Django-2.2

from django.db import models
from django.db.models import F, Q
from django.db.models.functions import Now

class MyModel(models.Model):
    start = models.DateTimeField()
    end = models.DateTimeField()

    def clean(self):
        # ...
        pass

    class Meta:
        constraints = [
            models.CheckConstraint(
                check=Q(start__lte=F('end'), start__gte=Now()),
                name='correct_datetime'
            ),
        ]
Run Code Online (Sandbox Code Playgroud)

鉴于数据库系统支持这一点,约束也将在数据库级别强制执行。