Django timezone.now() выдает время, когда я запустил сервер
Я использую timezone.now() (django.utils impor timezone) для установки начальной даты моей модели. Но timezone.now() фиксируется на времени, когда я устанавливаю сервер, и не меняется. Как я могу это исправить?
Я хочу, чтобы timezone.now() возвращала время, когда пользователь создает объект, а не время, когда я запускаю сервер.
Вы должны передать ему ссылку на функцию, так:
from django.db import models
from django.utils import timezone
class MyModel(models.Model):
created_at = models.DateTimeField(default=timezone.now)
Но, скорее всего, вы хотите использовать auto_now_add=True
[Django-doc], что также сделает поле нередактируемым:
from django.db import models
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
Для данного конкретного случая используются общепринятые расширения модели TimeStampedModel
from django_extensions.db.models import TimeStampedModel
class MyModel(TimeStampedModel):
pass
В результате миграции будут созданы created
и updated
, которые будут обрабатываться именно так, как вы ожидаете.