我目前正在开发一个类似9gag的网站,用户可在其中提交内容,然后对内容进行upvote / downvote。
在首页上,我想展示所有文章,这些文章是在5天前发布的,至少有2票。我的UserArticle模型有published_at field(A DateTimeField)
,我有一个名为UserVote
的模型,用于存储文章的投票。我用以下代码完成了这个:
def article_index(request):
time_threshold = timezone.now() - timedelta(days=5)
articles =(UserArticle.objects.annotate(num_votes=Sum('uservote__value'))
.filter(num_votes__gte=2, published_at__gte=time_threshold)
.order_by('-num_votes')
)
我唯一的问题是如何对帖子进行排序。它目前按降序排序,首先获得最高票数。
除了按最高票数进行排序外,我希望将旧文章按照发布后的几天来处罚。
类似于:num_votes + age_in_days_since_publication*(-2)
。