Как я могу заполнить свой DateTimeField автоматически для моих записей администратора? - PullRequest
1 голос
/ 28 сентября 2010

У меня есть поле date_added для моих записей, и мне неприятно нажимать на дату и время при их заполнении. Я хочу, чтобы это происходило за кулисами, и я не хочу, чтобы они даже отображались.1003 * Я погуглил и попытался найти SO, но не смог найти фрагмент того, как это можно сделать при сохранении формы.

Вот соответствующий бит из admin.py:

class BugForm( forms.ModelForm ):
    class Media:
    #js = ( 'http://static.arounds.org/wmd/wmd.js', )
    js = ( 'http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js', 'http://static.arounds.org/js/moowmd.js', 'http://static.arounds.org/js/wmd-config.js' )
    css = {
        'all': ('http://static.arounds.org/css/wmd.css',)
    }

    class Meta:
    model = Bug

class BugAdmin( admin.ModelAdmin ):
    fields = ['name', 'slug', 'excerpt', 'summary', 'date_added', 'poster', 'categories', 'status']
    prepopulated_fields = { 'slug' : ['name'] }
    form = BugForm

Я знаю, что мне, вероятно, придется указать exclude = ('date_added',) и определить функцию def save(), но я не уверен в деталях, необходимых для этого.

1 Ответ

5 голосов
/ 28 сентября 2010

Я хочу, чтобы это произошло за кулисами, и я не хочу, чтобы они даже появлялись.

IMHO, лучший способ сделать это - отредактировать модель и установить auto_now_add=True для поля date_added. Это предполагает, что у вас есть доступ для редактирования модели. Вы бы сделали что-то вроде:

class Bug(models.Model):
    ...
    date_added = models.DateTimeField(auto_now_add=True)

Это решит обе ваши проблемы: оно автоматически заполнит дату и время и не будет отображаться в приложении Admin. Из документов:

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

Хочу отметить, что есть дополнительный auto_now, который вы можете использовать для отслеживания обновлений. Установка auto_now=True будет полезна для полей date_updated, если таковые имеются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...