reddit のようなアプリケーションがあります。「投稿」があり、人々はそれらに賛成または反対の投票をします。私のテンプレートでは、すべての投稿を一覧表示し、その人が既に投稿に投票したかどうかを示すことができるようにしたいと考えています。
投稿でいっぱいのクエリセットをテンプレートに渡すので、少し混乱しますが、各投稿を繰り返し表示するときに、既存の投票があるかどうかも知りたいです。
ここにいくつかのコードがあります:
class Submission(models.Model):
submitter = models.ForeignKey(User)
title = models.CharField("Title", max_length=200)
class Vote(models.Model):
voter = models.ForeignKey(User)
submission = models.ForeignKey(Submission)
vote_value = models.FloatField()
class SubmissionListView(ListView):
model = Submission
queryset = Submission.objects.extra(select={'total': 'IFNULL((SELECT SUM(vote_value) ' + \
'FROM submissions_vote ' + 'WHERE submissions_vote.submission_id = ' + 'submissions_submission.id), ' + \
'0)'}).order_by('-total')
paginate_by = 5
各投稿のすべての投票を合計してページに合計を表示したいので、queryset extra() を実行していることがわかります。これが最も効率的な方法だと思います。
しかし、ページを表示しているユーザーが特定の投稿に投票した場合、その情報を何らかの方法でテンプレートに伝える必要があります。テンプレート内の各投票オブジェクトをループしてそこにあることを理解できることはわかっていますが、それは非常に非効率的です。私はクエリセットの連鎖について読んできました..それは私がここで行う必要があることですか?