我正在尝试为我的网站建立一个 Reddit 或 Hackernews 风格的社区部分。Upvotes 和 downvotes 以及发布的日期和时间已经实施。Post 模型有一个方法可以返回基于 upvotes、downvotes 和 time 发布的特定帖子的分数。到现在为止还挺好。
现在我不想每次用户加载页面时都对我的所有帖子进行排序。我认为解决方案(如果我错了,请纠正我)是每隔几分钟运行一个脚本,按分数对所有帖子进行排序并保存它们。然后,当用户尝试加载首页时,视图将返回排序帖子列表中的前 20 个帖子,如果有人加载第二页,则视图将返回列表中的下 20 个项目,依此类推。
我天真的方法是有一个看起来像这样的模型:
class SortedPosts(models.Model):
sortedPosts = models.ListField
然后每分钟运行一个脚本,如下所示:
from myproject.models import Post, SortedPosts
posts = Post.objects.all()
SortedPosts.sortedPosts = sorted(posts, key = lambda Post: Post.getScore())
SortedPosts.sortedPosts.save()
但是,唉,没有 ListField 这样的东西(至少在香草 Django 中)。当我搜索 SO 时,我发现的唯一解决方案是将列表序列化并将其存储在 TextField 中。那感觉不对。是吗?
Django 中没有 ListField 的事实让我怀疑我开始这样做的方式在更基本的方面是不正确的。这样做的正确方法是什么?