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

Django ORM: get queryset of one field type

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