1

Web サイトに Reddit または Hackernews スタイルのコミュニティ セクションを構築しようとしています。賛成票と反対票はすでに実装されており、投稿された日時も同様です。Post モデルには、賛成票、反対票、投稿時間に基づいて計算された特定の投稿のスコアを返すメソッドがあります。ここまでは順調ですね。

ユーザーがページを読み込むたびにすべての投稿を並べ替える必要はありません。これに対する解決策は、すべての投稿をスコアで並べ替えて保存するスクリプトを数分ごとに実行することだと思います (間違っている場合は修正してください)。次に、ユーザーがフロント ページをロードしようとすると、ビューは並べ替えられた投稿のリストの最初の 20 の投稿を返します。誰かが 2 番目のページをロードすると、ビューはリストの次の 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 がないという事実は、私がこれを行うために着手した方法がより根本的な方法で間違っているのではないかと疑っています。これを行う正しい方法は何ですか?

4

2 に答える 2