Срок действия объекта Story не истекает, когда пользователь публикует ленту историй
Как установить время истечения срока действия истории в определенное время, когда пользователи публикуют историю, Я работаю над проектом, где я хочу, чтобы пользователи могли публиковать историю в течение определенного периода времени, а затем она удаляется. Вот моя модель истории. На самом деле я не очень понимаю, как сделать так, чтобы срок действия истории, опубликованной пользователями, истекал в определенное время, например, через 48 часов сообщение должно быть удалено из ленты историй.
class StoryManager(models.Manager):
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).filter(
expire__lt=Now()
)
class Story(models.Model):
title = models.CharField(max_length=250)
story = models.FileField(upload_to="stories",blank=True,null=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
images = models.ImageField(upload_to="ImageStorie", blank=True,null=True)
created = models.DateTimeField(auto_now_add=True)
expire = models.DateTimeField(db_index=True)
likes = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name="like")
image_thumbnail = ImageSpecField(source='images', processors=[ResizeToFill(500, 300)],
format="JPEG",
options={'quality':100})
objects = StoryManager()
Это мое представление для модели истории, но история не удаляется через 48 часов, когда она была опубликована? Кто-нибудь может любезно помочь мне с этим!
def storie(request):
context = {}
videos = Story.objects.filter(expire__lt=Now()).delete()
context['video'] = videos
return render(request,'feed/feed.html', context)
Сейчас ваше представление, по сути, отфильтровывает все экземпляры Story
, которые старше Now()
. Вы можете отфильтровать набор запросов по дельте до created
, которая является временной меткой создания экземпляра истории.
# View
from datetime import datetime, timedelta
def storie(request):
# Delta of 48 hours from creation
time_delta = datetime.now() - timedelta(hours=48)
# Apply filter to queryset
videos = Story.objects.filter(created__lt=time_threshold)
context = {
'videos': videos
}
return render(request,'feed/feed.html', context)
Обратите внимание, что это удаляет все истории старше 48 часов из ленты историй / набора запросов. В базе данных они, конечно же, остаются постоянными.