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, которые будут обрабатываться именно так, как вы ожидаете.

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