Кэшируется ли timzone.now() при использовании в ограничении проверки?
У меня есть поле модели с учетом часового пояса с ограничением CheckConstraint:
class MyModel(models.Model):
my_text = models.CharField()
my_date = models.DateTimeField()
class Meta:
constraints = [ models.CheckConstraint(
check=Q(my_date__lte=django.utils.timezone.now()),
name='mycontraint' ]
В моей форме я обрабатываю данные, чтобы добавить my_date вручную:
def form_valid(self, form):
obj = form.save(commit=False)
obj.my_date = timezone.now()
obj.save()
При сохранении этой модели я получаю new row for relation "mymodel_mydate" violates check constraint 'myconstraint'.
Я знаю, что причина неудачи в том, что время даты для my_date
больше, чем timezone.now()
в ограничении проверки, но почему это так? Может, timezone.now()
в ограничении проверки каким-то образом кэшируется раньше?
Я могу видеть значение для my_date в отладочной неудачной строке (которое является правильным, в UTC+00 и соответствует моему системному времени, как я ожидаю), однако я не знаю, как сравнить его со значением часового пояса в CheckConstraint?