gpt4 book ai didi

python - 在 Django 中查询多对多关系

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:50 25 4
gpt4 key购买 nike

假设我有以下模型,其中问题和选择具有多对多关系,选择和投票者具有多对多关系。 (为了更好地理解它,请考虑一个民意调查,其中每个问题可以有多个选择,每个选择可以与多个问题相关联,并且每个选择存储投票者的列表,并且投票者可以投票给多个选择。)

class Question(models.Model):
question_text = models.CharField(max_length=200)
choices = models.ManyToManyField('Choice')

class Choice(models.Model):
choice_text = models.CharField(max_length=200)
voters = models.ManyToManyField('Voter')

def __str__(self):
return self.choice_text

class Voter(models.Model):
name = models.CharField(max_length=500, default='FNU')

def __str__(self):
return self.name

给定一个问题对象 ques1,我希望能够获取与该问题的选项关联的所有选民的列表,即我想要一个包含为一个或多个投票的所有选民的查询集与 Question 对象 ques1 关联的 Choices。

因此,如果选项 c1c2 与问题 ques1 关联,并且选民 v1 v2 投票给了选项 c1,投票者 v3 投票给了选项 c2,然后对问题 ques1 运行查询code>,我想要一个包含 [v1, v2, v3] 的 QuerySet。

对此有任何疑问吗?

当然,效率极低的解决方法是迭代ques1.choices,并在每次迭代时更新所有选民的运行列表。我想通过使用 select_lated 可以稍微提高效率,但不能提供干净的查询。

最佳答案

我们可以做到:

Voter.objects.filter(choice__in=ques1.choices.all()).distinct()    # Used distinct() to get unique voters.

Django's official documentation 中了解更多相关信息.

关于python - 在 Django 中查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com