我有一个具有以下三种模式的民意测验应用程序:
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
模型是存储用户投票的地方,哪个他们选择的选择。我需要进行查询,以检查登录的用户是否回答了问题,以及他们是否选择了哪种选择。我该如何查询?
答案 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参考。)