Срок действия объекта истории не истекает, когда пользователь публикует ленту новостей

#django #django-models #django-views

Вопрос:

Как установить время истечения срока действия истории в определенное время, когда пользователи публикуют историю, я работал над этим проектом, в котором я хочу, чтобы пользователи могли публиковать ленту новостей в течение определенного периода времени, а затем ее удаляли. Вот моя модель истории. на самом деле я не совсем понимаю, как сделать так, чтобы срок действия истории сообщений пользователей истек в определенное время, например, через 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)
 

Ответ №1:

Прямо сейчас ваше представление в основном отфильтровывает все экземпляры 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 часов из ленты новостей / набора запросов. В базе данных они, конечно, все еще сохраняются.