В django - есть ли поле метки времени по умолчанию для всех объектов? То есть должен ли я явно объявлять поле «отметка времени» для «созданного» в моей модели - или есть способ получить это автоматически?
Ответы:
По умолчанию такого нет, но добавить его очень просто. Просто используйте auto_now_add
параметр в DateTimeField
классе:
created = models.DateTimeField(auto_now_add=True)
Вы также можете использовать 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)
Автоматически не похоже на то, что django делал бы по умолчанию. Это не заставит вас требовать метку времени.
Я бы создал абстрактный базовый класс и унаследовал от него все модели, если вы не хотите забывать о метке времени / имени поля и т. Д.
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):
....
created
и updated
. Это отличный способ сделать это чисто.
Если вы используете django-extensions (это хорошее приложение для добавления функций к помощнику командной строки django-admin.py), вы можете получить эти поля модели бесплатно, унаследовав от их TimeStampedModel или используя их настраиваемые поля TimeStamp
Вы можете попробовать django-extensions
если вы хотите использовать абстрактную модель с отметкой времени
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Есть и другие абстрактные модели. вы тоже можете это использовать.
Я думаю, что пойду с
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
model_utils
для Django, который уже содержитTimeStampedModel
, но если вам больше ничего не нужно из этого пакета, просто сохраните его без лишнего веса.