Подтвердить что ты не робот

В django модели имеют по умолчанию временную область?

В django - есть ли поле времени по умолчанию для всех объектов? То есть, я должен явно объявить поле "timestamp" для "created on" в моей модели - или есть ли способ получить это автоматически?

4b9b3361

Ответ 1

По умолчанию такого нет, но добавить его очень просто. Просто используйте параметр auto_now_add в классе DateTimeField:

created = models.DateTimeField(auto_now_add=True)

Вы также можете использовать auto_now для auto_now "обновлено". Проверьте поведение auto_now здесь.

Для auto_now_add здесь.

Модель с обоими полями будет выглядеть так:

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

Ответ 2

Automagically не похоже на то, что django будет делать по умолчанию. Это не заставило бы вас требовать отметки времени.

Я бы создал абстрактный базовый класс и наследовал все модели от него, если вы не хотите забывать о timestamp/fieldname и т.д.

class TimeStampedModel(models.Model):
     created_on = models.DateTimeField(auto_now_add=True)

     class Meta:
         abstract = True

Не похоже, чтобы импортировать wherever.TimeStampedModel вместо django.db.models.Model

class MyFutureModels(TimeStampedModel):
    ....

Ответ 3

Если вы используете django-extensions (это хорошее приложение для добавления функций в помощник командной строки django-admin.py), вы могут получить эти поля модели бесплатно, наследуя от их TimeStampedModel или используя их custom Поля TimeStamp

Ответ 4

Вы можете попробовать django-extensions

если вы хотите использовать абстрактную модель метки времени

from django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...

Он имеет другие абстрактные модели. вы также можете использовать это.

Ответ 5

Если вы хотите изменить это поле, установите вместо auto_now_add=True:

Для даты

from datetime import date

models.DateField(default=date.today)

Для DateTime

from django.utils import timezone

models.DateTimeField(default=timezone.now)

Ответ 6

Я думаю, я бы пошел с

created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)

Мне нужны пояснения по использованию

class TimeStampedModel(models.Model):
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
         abstract = True