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



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

793   6  

6 ответов:

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

created = models.DateTimeField(auto_now_add=True)

вы также можете использовать auto_now для поля 'updated on'. Проверьте их поведение в документе.

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

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):
    ....

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

вы можете попробовать 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

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

На Дату

from datetime import date

models.DateField(default=date.today)

Для DateTime

from django.utils import timezone

models.DateTimeField(default=timezone.now)

Comments

    Ничего не найдено.