67059


複数のテーブルを結合した結果を取得したいです。  
メインとなるテーブルからは直接紐づかない形になります。  
言葉では説明が難しいので以下に例を記載します。

良い例が浮かばず不自然なテーブル構成になっていますがご了承ください。

### モデル定義

[code]

    class User(models.Model):
        class Meta:
            db_table = 'user'
        user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        user_name = models.CharField()
    
    class UserGroup(models.Model):
        class Meta:
            db_table = 'user_group'
    
        comment = models.CharField()
        user = models.ForeignKey(UserMaster, on_delete=models.CASCADE)
        group = models.ForeignKey(UserMaster, on_delete=models.CASCADE)
    
    class Group(models.Model):
        class Meta:
            db_table = 'group'
    
        group_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        group_name = models.CharField()
    
[/code]

### テーブルのデータ

[code]

    ## User
    user_id, user_name
    1, taro
    2, hanako
    
    ## Group
    group_id, group_name
    1, group1
    2, group2
    
    ## UserGroup
    id, comment, user_id, group_id
    1, comment_x, 1, 1
    2, comment_y, 1, 2
    
[/code]

### 取得したい形

イメージですので、細部が異なっていても問題ありません

[code]

    users = User.objects..... # 質問したい所
    
    users[0].group[0].name # group1
    users[0].user_group[0].comment # comment_x
    users[0].user_group[0].group.group_name # group1
    
[/code]

### JSON的なイメージ

[code]

    {
      user_id: 1,
      user_name: taro,
      group:[
        {
          group_id: 1,
          group_name: group1
        },
        {
          group_id: 2,
          group_name: group2
        }
      ],
      user_group:[
        {
          comment: comment_x,
          group: {
              group_id: 1,
              group_name: group1
          }
        },
        {
          comment: comment_y,
          group: {
              group_id: 2,
              group_name: group2
          }
        }
      ]
    }
    
[/code]

### SQLで取得する場合

構造化されないので厳密には異なりますが。。。

[code]

    select * from user
    inner join user_group on user.user_id = user_group.user_id
    inner join group on group.group_id = user_group.group_id;
    
[/code]


CC BY-SA 4.0
2020-04-23T16:03:02.000
65901
2020-11-01T01:01:20.140
13022
question
python django
Djangoで複数のテーブルを結合して取得したい


ManyToManyFieldで2つモデム(User,Group)のみでいいと思います。

[code]

    class Group(models.Model):
        group_name = models.CharField()
    
    class User(models.Model):
        group = models.ManyToManyField(Group)
        user_name = models.CharField()
    
[/code]


CC BY-SA 4.0
2020-05-28T01:25:43.327
67059
2020-05-28T03:24:17.073
2020-05-28T03:24:17.073
3060
35698
65901
answer