【发布时间】:2021-03-28 11:47:12
【问题描述】:
这些是我的模型
团队表
class Team(CommonModel):
****Other Fields****
name = models.CharField()
game = models.ManyToManyField(Game, through='Team_Game')
映射表
class Team_Game(CommonModel):
game = models.ForeignKey(Game, on_delete=models.CASCADE)
team = models.ForeignKey(Team, on_delete=models.CASCADE)
status = models.SmallIntegerField(default=1)
class Meta:
db_table = 'team_game'
游戏桌
class Game(CommonModel):
name = models.CharField(max_length=128, blank=False, null=False, unique=True)
status = models.SmallIntegerField(default=1)
我想检索 id 为 1 的团队和与之关联的游戏 预期数据:team.name、other_team_cols、[game_id1、game_id2]
查询:
team_data = Team.objects.filter(id=1).values('id', 'name', 'game__name')
输出:
[
{
"id": "1",
"name": 'abc',
"game__name": "game1"
},
{
"_packageID": "1",
"name": "def",
"game__name": "game2"
}
]
预期输出:
{
"id": "1",
"name": 'abc',
"game__name": ["gam1", "gam2"]
}
【问题讨论】:
-
您的查询生成的 SQL 不会将游戏名称聚合到数组中。如果你使用 postgres,那么你可以使用
ArrayAgg(docs.djangoproject.com/en/3.1/ref/contrib/postgres/aggregates/…)。所以查询可能看起来像Team.objects.filter(id=1).aggregate(game__names=ArrayAgg('game__name')).values('id', 'name', 'game__names')。我不知道像game__name这样的数组聚合的命名输出是否不会以某种方式干扰模型字段。
标签: django django-models django-rest-framework django-orm mysql-python