我有以下型号:
class Competition(models.Model):
# ...
class Result(models.Model):
# ...
competition = ForeignKey(Competition, on_delete=models.CASCADE,
related_name='individual_results',
related_query_name='individual_results')
athlete = ForeignKey(Athlete, on_delete=models.CASCADE)
class Athlete(models.Model):
# ...
我想做的是为每个运动员创建一个概览,并显示按比赛分组的那个运动员的结果。
尝试过这样的事情:
athlete = Athlete.objects.get(pk=1)
competitions = Competition.objects
.prefetch_related('individual_results')
.filter(individual_results__athlete=athlete)
但是当我在模板中执行competition.indvidual_results.all
时,它会显示比赛的所有结果,而不仅仅是该运动员的结果。
答案 0 :(得分:1)
.filter(..)
不会不过滤相关的经理。汇总时,可以使用它进行过滤,但预取管理器中的项目则不能进行过滤。
不过,您可以使用Prefetch
object [Django-doc],例如:
results = Result.objects.filter(athlete_id=1)
competitions = Competition.objects.prefetch_related(
Prefetch('individual_results', queryset=results, to_attr='athlete_results')
)
现在,带有id=1
的运动员的个人成绩存储在此查询集产生的athlete_results
中的属性Competition
中。