Как автоматически обновлять поле модели django через день?

Как обновить поле is_new, чтобы оно стало False через день

class post(models.Model):
    title = models.CharField(max_length = 250)
    body = RichTextField(blank= True, null =True)
    created_at = models.DateTimeField(auto_now_add=True)
    is_new = models.BooleanField(default=True)

Вместо того, чтобы сохранять эти данные в модели, сделайте свойство для этого значения, так как is_new является динамическим полем.

class Post(models.Model):
    title = models.CharField(max_length = 250)
    body = RichTextField(blank= True, null =True)
    created_at = models.DateTimeField(auto_now_add=True)
    
    @property
    def is_new(self):
        return (timezone.now() - self.created_at).days < 1

При фильтрации с помощью ORM следует выполнять проверку в атрибуте created_at, поскольку is_new не хранится в базе данных.

from django.utils import timezone
new_posts = Post.objects.filter(created_at__date=timezone.localdate())

Если вы хотите иметь поле is_new внутри экземпляра при получении набора запросов, вам нужно использовать аннотацию:

from django.db.models import Q
Post.objects.annotate(is_new=Q(created_at__date=timezone.localdate()))
Вернуться на верх