从查询中获取用户的投票

时间:2018-11-02 00:39:35

标签: python django

我有一个具有以下三种模式的民意测验应用程序:

class Question(models.Model):
    user            = models.ForeignKey(User, on_delete=models.CASCADE)
    status          = models.CharField(max_length=200)
    total_votes     = models.IntegerField(default=0)
    created_at      = models.DateTimeField(auto_now_add=True)


class Choice(models.Model):
    question    = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice      = models.CharField(max_length=120)

class Voting(models.Model):
    user    = models.ForeignKey(User, on_delete=models.CASCADE)
    choice  = models.ForeignKey(Choice, on_delete=models.CASCADE)
    answered_at = models.DateTimeField(auto_now_add=True)

Question模型是存储所有问题的地方,Choice模型是存储这些问题的所有选择的地方,Voting模型是存储用户投票的地方,哪个他们选择的选择。我需要进行查询,以检查登录的用户是否回答了问题,以及他们是否选择了哪种选择。我该如何查询?

1 个答案:

答案 0 :(得分:1)

首先,我们将获得与登录用户和正在考虑的问题相关联的所有Voting实例的相关QuerySet(我将其对应的对象随意称为Question):< / p>

votes = Voting.objects.filter(user=request.user, choice__question==Question)

这是一个QuerySet对象,可能代表空的结果集。要确定是否存在任何实例(即用户对问题进行了投票),只需检查:

votes.exists()

如果这样做,可以从以下选项中提取他们选择的选择(假设他们最多只能选择一个):

votes.choice[0].choice

(也就是说,如果您想要实际的choice字段的值)。

(如果您还没有读过https://docs.djangoproject.com/en/2.1/topics/db/queries/https://docs.djangoproject.com/en/2.1/ref/models/querysets/,我也鼓励您阅读。所有Django文档都是很棒的imo,同时提供概述和API参考。)