Как автоматически обновлять поле модели 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()))