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