Django ORM:获取一个字段类型的查询集

时间:2018-01-11 22:59:46

标签: python django django-orm

我的模型ProblemVote包含userForeignKey),problemForeignKey)和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)之类的查询集差异。

1 个答案:

答案 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所述