django - 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)
...
循环浏览我的比赛,我希望检索要显示的比赛团队对象列表以及相关团队的名称。我试过了:
CompetitionTeam.objects.filter(competition_id=_competition.id).filter(team_id__in=joined_team_ids).annotate(name=...)
- 我将子查询表达式放入其中而不是省略号。但是,我不确定如何匹配team_id变量。例如。
*.anotate(name=Subquery(Team.objects.filter(id=competitionteam.team_id)).values('name'))
相关的问题是: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 only be used in a subquery."
解决方案
我的问题的解决方案是:
CompetitionTeam.objects.filter(competition_id=_competition.id).filter(team_id__in=joined_team_ids).annotate(name=Subquery(Team.objects.filter(id=OuterRef('team_id')).values('name')))
谢谢。
推荐阅读
- python - 如何在 discord.py 消息中获取提及用户的 ID?
- qt - QtQuick Controls 2 中的新 TableView 是否支持不同的“角色”
- webpack - Webpack dist 构建 html 布局与开发不同
- python - 与 python 请求保持在同一页面上以解决验证码
- google-cloud-platform - Google Cloud Composer(Airflow) - DAG 内的数据流作业成功执行,但 DAG 失败
- c# - 使用 ASP.NET MVC 更新数据库
- visual-studio - MFC:如何更改 CFileDialog 的默认文件名?
- java - 将日期传递给 Java 对象的构造函数
- html - 嵌入带有播放列表视图的 youtube 播放器
- python - 如何在 spyder 中正确输入模块?