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



>我有一个模型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 处理外键字段查询的方式,更改了过滤器调用,如此处所述

最新更新