Django: Обновление поля в модели при выполнении условия

У меня есть модель Post Model, которая выглядит следующим образом. Когда временная метка с истекшим сроком меньше, чем временная метка сейчас, я хотел бы, чтобы статус изменился с Live на Expired, однако код не обновляется, когда условие выполняется. Как я могу изменить это, чтобы он обновлялся

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=60)
    topic = models.CharField(choices=TOPIC_CHOICES, max_length=60)
    content = models.TextField(max_length=1500)
    likes = models.ManyToManyField(User, related_name="posts_likes", blank=True, through=PostLike)
    dislikes = models.ManyToManyField(User, related_name="post_dislikes", blank=True, through=PostDislike)
    # comments = models.CharField(max_length=240, null=True, blank=True)
    created_timestamp = models.DateTimeField(default=now, editable=False)
    expired_timestamp = models.DateTimeField(default=expiration_time, editable=False)
    status = models.CharField(max_length=60, default="Live")

    def save(self, *args, **kwargs):
        if now >= self.expired_timestamp:
            self.status = "Expired"
        super(Post, self).save(*args, **kwargs)

Я думаю, что вместо 'now' вам следует ввести date.today() или datetime.datetime.now(). Сообщите мне, если это работает

import datetime
def save(self, *args, **kwargs):
        if date.today() >= self.expired_timestamp:
            self.status = "Expired"
        super(Post, self).save(*args, **kwargs)

Сначала необходимо явно объявить теперь:

from django.utils import timezone

def save(self, *args, **kwargs):
    if timezone.now() >= self.expired_timestamp:
        self.status = "Expired"

    super(Post, self).save(*args, **kwargs)

Но есть проблема, этот код выполняется только при вызове метода save (когда экземпляр создается или обновляется), поэтому, когда пост истек, его статус не обновляется автоматически (до вызова save), если вы хотите делать это автоматически, вы должны периодически проверять наличие истекших постов, возможно, используя cron

Вернуться на верх