我的模型ProblemVote
包含user
(ForeignKey
),problem
(ForeignKey
)和status
字段。我需要所有问题(已经投票),状态为“AC”和“R”。
我能够在Python列表中获取所有必需的问题。但是,我想知道是否有更好的方法使用queryset方法。
我的部分代码:
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)
之类的查询集差异。
答案 0 :(得分:1)
如果我理解正确的内容实际上是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处理外键字段查询的方式而改变了过滤器调用,如here所述