首页 > 解决方案 > 在单行中以多对多关系获取数据

问题描述

这些是我的模型

团队表

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"]
}

标签: djangodjango-modelsdjango-rest-frameworkdjango-ormmysql-python

解决方案


声明一个数组迭代循环并存储 game__name 值输出

team_data=[
    {
        "id": "1",
        "name": "abc",
        "game__name": "game1"
    },
    {
        "_packageID": "1",
        "names": "def",
        "game__name": "game2"
    }
]
arr=[]

for report in team_data :
    
    arr.append(report["game__name"])
print(arr)

推荐阅读