[英]Get most liked post in last 10 days in django
我正在構建一個博客應用程序,我試圖在過去 10 天內獲得最喜歡的博客文章。 然后 10 天后,將顯示新的最喜歡的帖子。 但是當我嘗試訪問時沒有顯示。
模型.py
class BlogPost(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
date_added = models.DateTimeField()
likes = models.ManyToManyField(User, related_name='blogpost_dislike', blank=True)
視圖.py
def blogposts(request):
time = timezone.now() - timedelta(days=10)
liked = BlogPost.objects.annotate(
num_likes=Count('likes')).filter(
num_likes__gt=70).filter(date_added__gte=time)
但是上面的代碼將顯示超過 10 個贊的帖子。 但是我想在 10 天內顯示最喜歡的(沒有最少的)。
我試過什么:-
@register.simple_tag
def get_most_commented_posts(count=10):
return BlogPost.objects.annotate(
total_likes=Count('likes')
).order_by('-total_likes')[:count]
此代碼也不起作用,它顯示了所有帖子。
liked = BlogPost.objects.annotate(total_likes=Count('likes')).filter(date_added__lte=time)
但這甚至不是過濾,它顯示了所有帖子。
而且我正在嘗試獲得過去 10 天內最受歡迎的帖子。
任何幫助,將不勝感激。
先感謝您。
這應該有效,
liked = BlogPost.objects.order_by("-likes")[:10]
編輯:對於贊 > 1 的帖子和過去 10 天的帖子
liked = BlogPost.objects.filter(Q(likes__gte=1) , date_added__gte=datetime.now()-timedelta(days=10)).order_by("-likes")[:10]
您可以像這樣過濾計數:
liked = BlogPost.objects.annotate(total_likes_in_dt=Count('likes', filter=Q(date_added__lte=time)).filter(total_likes_in_dt__gt=0).order_by('total_likes_in_dt')[:10]
更多文檔:
https://docs.djangoproject.com/en/3.2/topics/db/aggregation/#filtering-on-annotations
你的要求我不是很清楚,如果帖子是20天前加的,3天前點贊了,點贊夠多算嗎?
我覺得你的模型缺少一些數據,如果你不存儲喜歡的日期,那么你只能得到按創建日期和喜歡數量排序的帖子。 這意味着您可以將查詢限制為所需的創建日期,然后按喜歡的數量排序。
如果您想在特定時間段內獲得最喜歡的人,而不管發布日期如何,那么您需要捕獲喜歡的日期。 如果需要,您仍然可以使用發布日期來限制您的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.