автоматическое поле dateTime в django - PullRequest
0 голосов
/ 09 июня 2011

Здравствуйте, я работаю над приложением блога , и у меня есть модель:

class Post(models.Model):
    title = models.CharField(max_length=255)
    <..>
    is_published = models.BooleanField(default=False)                                  
    time_publish = models.DateTimeField()
    time_edit = models.DateTimeField(auto_now=True)
    time_create = models.DateTimeField(auto_now_add=True)

И я хочу установить это, когда пользователь устанавливает is_published=True и .save()затем вызывается time_publish, чтобы сохранить текущее время.

Проблема в том, что я не знаю, какой маршрут мне выбрать.Перезаписать .save() или сделать что-то с сигналами или как?Я был бы признателен за некоторые ссылки на Документы.

Извините, если это дублирование, но я не знаю, как назвать этот вопрос.

Обновление:

Так что спасибоМанджи я создал этот код, который работает:

def save(self, *args, **kwargs):
    if self.pk is not None:
        orig = Post.objects.get(pk=self.pk)
        if not orig.time_publish and self.is_published:
            self.time_publish = datetime.now() 
        elif not self.is_published:
            self.time_publish = None
    super(Post, self).save(*args, **kwargs)   

1 Ответ

1 голос
/ 09 июня 2011

Самое простое решение (и совместимое с django) - переопределить метод save вашей модели.

class Post(models.Model):
    ...

    def save(self, *args, **kwargs):
        if self.is_published:
            self.time_publish = datetime.now() # don't forget import datetime
        super(Post, self).save(*args, **kwargs)
        ...

Больше информации здесь: Переопределение предопределенных методов модели

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