Django: модели длятся ультрасовременную дату и ультрасовременное количество

Если мое перечисление имеет шанс того, чтобы когда-нибудь быть используемым вне класса, я намереваюсь использовать его, я создаю отдельный исходный файл для перечисления. Иначе я помещу его в классе, я намереваюсь использовать его.

7
задан Sebastian Wozny 21 November 2015 в 14:09
поделиться

2 ответа

Создайте DateTimeField в своей модели. Обновляйте его при каждом сохранении. Для этого необходимо использовать параметр auto_now_add :

class DateTimeField([auto_now=False, auto_now_add=False, **options])

DateTimeField.auto_now_add¶

Автоматически устанавливать для поля значение «сейчас» каждый раз при сохранении объекта. Полезный для отметок времени "последнего изменения". Запись что всегда используется текущая дата; это не просто значение по умолчанию, которое вы

Это должно выглядеть примерно так:

class Message(models.Model):
    message = models.TextField()
    active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)

Ссылка на поле модели

Для второй части, я думаю, вам придется перегрузить

ModelAdmin.save_model(self, request, obj, form, change)

Как Джеймс Беннетт описывает здесь . Это будет выглядеть примерно так:

class EntryAdmin(admin.ModelAdmin):

def save_model(self, request, obj, form, change):
    if change:
        obj.change_count += 1
    obj.save()
12
ответ дан 6 December 2019 в 09:21
поделиться

Есть несколько способов увеличить количество изменений при каждом сохранении.

Сама модель имеет метод save (), а модель администратора имеет метод model_save ().

Так, например, предположим, что вы хотите, чтобы он увеличивался, когда он был отредактирован с помощью инструмента администратора ....

models.py:

class MyModel(models.Model):
    edit_count = models.IntegerField()
    # ... rest of model code here...


admin.py:

class MyModelAdmin(admin.ModelAdmin)
    def save_model(self, request, obj, form, change):
        if not change:
            obj.edit_count = 1
        else:
            obj.edit_count += 1
        obj.save()

Вы можете сделать аналогичный код и для события save () модели.


Что-то еще вас может заинтересовать django-command-extensions . Он добавляет 2 поля, которые могут быть вам полезны:

  • CreationDateTimeField - DateTimeField, который автоматически устанавливает дату при первом сохранении объекта в базе данных.

  • ModificationDateTimeField - DateTimeField, который автоматически устанавливает дату при сохранении объекта в базе данных.

2
ответ дан 6 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: