Проверка даты -> дата окончания должна быть больше даты начала - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно написать скрипт, в котором он проверяет, что конечная дата больше начальной. Также дата начала / дата окончания не может быть раньше текущей даты. Должен быть написан на Django 1.8.

1 Ответ

0 голосов
/ 03 июля 2019

Для этого вы можете переопределить метод 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 <b>clean</b>(self):
        super().clean()
        if not (timezone.now() <= self.start <= self.end):
            raise ValidationError('Invalid start and end datetime')

Начиная с , вы можете использовать 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:
        <b>constraints</b> = [
            models.CheckConstraint(
                check=Q(start__lte=F('end'), start__gte=Now()),
                name='correct_datetime'
            ),
        ]

Учитывая, что система баз данных поддерживает это, ограничения будут применяться и на уровне базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...