Django DateTimeField становится нулевым, когда не редактируется - PullRequest
0 голосов
/ 11 августа 2011

В основном у меня есть этот код на моей ModelForm:

def save(self):
    if not self.instance.pk:
        self.instance.author = self.author
        self.instance.date_sorted = datetime.now()
    return super(PostForm, self).save(commit = True)

Моя цель - сохранять дату_сортировку только после добавления записи и игнорировать ее при редактировании. Мое поле date_sorted определено как:

date_sorted = models.DateTimeField(blank = True, null = True)

Я определил на этом пустое значение = True и null = True, потому что в какой-то момент я хочу, чтобы некоторые из сортированных по дате были нулевыми (специально).

При добавлении сортировка по дате будет сохранять текущую дату и время, но при редактировании (обновлении других полей) сортировка по дате изменяется на ПУСТО (NULL). Пытался найти похожие проблемы в сети, но не повезло :(. Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Попробуйте, это будет скрывать поле даты и времени из вашей формы и автоматически устанавливать дату при отправке сообщения:

date_sorted = models.DateTimeField(auto_now=True)

Также вы можете использовать метод save_model:

def save_model(self, request, obj, form, change):
    super(MessageAdmin, self).save_model(request, obj, form, change)

Я использовал это для админ-панели и не знаю, как она работает в других реализациях, но попробую взглянуть на это. Вы можете ввести свой код перед сохранением объекта и после него, чтобы изменить obj.date_sorted и затем сохранить модель.

0 голосов
/ 11 августа 2011

models.DateTimeField имеет два атрибута: auto_now_add=True|False и auto_now=True|False.Они оба автоматически сделают поле как editable=False.Используйте auto_now=True для установки текущей даты и времени при каждом обновлении поля.Используйте auto_now_add=True для установки текущего времени только при первом сохранении объекта.

...