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