Лучшая практика для устранения различий между синхронизацией Now() и timezone.now() в базах данных и веб-рабочих?

У меня есть checkconstraint на модели django, применяемый на базе данных PostgreSQL:

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

class Event(models.Model):
    mydate = models.DatetimeField() 

    class Meta:
        constraints = [
            CheckConstraint(
                check = Q(mydate__lte=Now()), 
                name = 'check_my_date',
            ),
        ]

Ограничение гарантирует, что mydate не может быть в будущем, но ограничивает его, чтобы оно было меньше, чем Now(), которое возвращает время начала транзакции на сервере PostgreSQL.

Я установил mydate программно в приложении:

from django.utils import timezone

now = timezone.now()
myevent = Event.objects.create(mydate=now)

Однако это часто приводит к неудаче при проверке ограничения. Я предполагаю, что это происходит потому, что я использую Heroku, с отдельным PostgreSQL и рабочим (app) экземпляром. Временная метка PostgreSQL Now(), по-видимому, на несколько секунд отстает от временной метки веб-рабочего.

Какова наилучшая практика синхронизации/разрешения этого конфликта?

Вернуться на верх