>我有一个模型ProblemVote
,其中包含user
(ForeignKey
(,problem
(ForeignKey
(和status
字段。我需要状态为"AC"和"R"的所有问题(已投票(。
我能够在 Python 列表中获取所有必需的问题。但是,我想知道是否有更好的方法来使用查询集方法。
我的部分代码:
all_votes = ProblemVote.objects.filter(
user=user).select_related("problem").filter(problem__stage='PV')
all_votes_problems = [vote.problem for vote in all_votes]
accepted_problems = [vote.problem for vote in all_votes if vote.status == 'AC']
rejected_problems = [vote.problem for vote in all_votes if vote.status == 'R']
将问题作为查询集获取将有助于我查找queryset.count()
计数并查找查询集差异,例如queryset.difference(another_queryset)
。
理解正确,您想要的实际上是一个Problem
查询集而不是ProblemVote
查询集?
如果是这样,您应该使用过滤器中的Problem
模型和双下划线表示法来获取所需的内容。像这样:
all_problems = Problem.objects.filter(stage='PV', vote__user=user)
accepted_problems = Problem.objects.filter(stage='PV', vote__user=user, vote__status='AC')
rejected_problems = Problem.objects.filter(stage='PV', vote__user=user, vote__status='R')
确保将筛选器调用中的vote
更改为模型中实际存在的外键访问器(外键字段上的related_name
属性(。
编辑:由于 Django 处理外键字段查询的方式,更改了过滤器调用,如此处所述