小编Her*_* No的帖子

Django:使用另一个表中的字段进行注释(一对多)

再会。我希望用不同表中的信息来注释我的模型。

class CompetitionTeam(models.Model):
    competition_id = models.ForeignKey('Competition', on_delete=models.CASCADE, to_field='id', db_column='competition_id')
    team_id = models.ForeignKey('Team', on_delete=models.CASCADE, to_field='id', null=True, db_column='team_id')
    ...

class Team(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)
    teamleader_id = models.ForeignKey('User', on_delete=models.CASCADE, to_field='id', db_column='teamleader_id')
    ...

class Competition(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)
    ...
Run Code Online (Sandbox Code Playgroud)

循环浏览我的比赛,我希望检索要显示的竞赛团队对象列表以及相关团队的名称。我试过:

CompetitionTeam.objects.filter(competition_id=_competition.id).filter(team_id__in=joined_team_ids).annotate(name=...)
Run Code Online (Sandbox Code Playgroud)

- 我在其中放置子查询表达式而不是省略号。但是,我不确定如何匹配team_id变量。例如。

*.anotate(name=Subquery(Team.objects.filter(id=competitionteam.team_id)).values('name'))
Run Code Online (Sandbox Code Playgroud)

相关问题是:Django annotate field value from another model,但我不确定在这种情况下如何实现。在这种情况下,mymodel_id我使用 代替 ,team_id但它只有来自 Team 对象的参数,而不是我的竞赛团队对象。我不太明白OuterRef,但这是我失败的尝试:

CompetitionTeam.objects.filter(competition_id=_competition.id).filter(team_id__in=joined_team_ids).annotate(name=Subquery(Team.objects.get(id=OuterRef('team_id'))))
"Error: This queryset contains a reference to an outer query and may …
Run Code Online (Sandbox Code Playgroud)

django django-queryset many-to-one

5
推荐指数
1
解决办法
7514
查看次数

标签 统计

django ×1

django-queryset ×1

many-to-one ×1