У 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 (що є хорошим додатком для додавання функціональності до помічника командного рядка django-admin.py), ви можете отримати ці поля моделі безкоштовно, успадкувавши їх від TimeStampedModel або використовуючи власні поля TimeStamp
Ви можете спробувати розширення django
якщо ви хочете використовувати абстрактну модель із позначкою часу
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
, але якщо вам не потрібно нічого іншого з цього пакету, просто зберігайте його без зайвої ваги.