簡體   English   中英

在 Django 中獲得過去 10 天內最喜歡的帖子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM