-1
我有一个类似reddit的应用程序。有“职位”,人们在上面或下面投票。在我的模板中,我列出了所有帖子,并且希望能够指出该人是否已经对帖子投了票。Django查询集和外键
这有点令人困惑,因为我将我的查询集充满帖子传递给模板,但当我迭代每个帖子来显示它时,我也想知道是否有现有的投票。
下面是一些代码:
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
好了,所以你可以看到我在做一个查询集额外的(),因为我想总结一下所有的选票每个岗位,并显示在页面上总。我认为这是做到这一点的最有效的方法。
但是,如果查看该页面的用户对特定提交进行了投票,我需要以某种方式将该信息传递给模板。我知道我可以通过模板中的每个投票对象循环,并找出那里,但似乎真的很低效。我一直在阅读关于链接查询集..是我需要在这里做什么?
嗯...我喜欢你的想法,但我可以在这一点上似乎无法访问self.request.user.pk。可能是因为自我在这一点上不可用? – asolberg
啊我不好。我没有意识到你定义了queryset的位置。我编辑了我的答案来解决这个问题。 – jproffitt
是的,似乎工作。除非我真的需要返回“vote_value”字段,以便我可以判断投票是否已启动或停止。我试图说,然后选择voter_id,vote_value .....然后vote_value其他0,但没有工作。 – asolberg