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