この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:T
更新日時:2019-06-14 22:48:49

タイトル: モデルの内部結合(1対1)
SEOタイトル: 【django】モデルの内部結合(1対1)

この記事の要点
  • Django でモデルの内部結合 (INNER JOIN)
  • 1 対 1 / 1 対多: ForeignKey または OneToOneField でリレーション定義
  • 取得: queryset.select_related('related_field') で JOIN クエリ生成
  • N+1 問題回避には select_related(FK)/ prefetch_related(多対多)

 

モデル

from db_itn.models.dept import Dept
from django.db import models

class User(models.Model):

    user_id = models.IntegerField(primary_key=True)

    dept = models.ForeignKey(Dept, on_delete=models.DO_NOTHING)

    class Meta:

        db_table = 'user'
 

 

from django.db import models

class Dept(models.Model):

    dept_id = models.IntegerField(primary_key=True)

    dept_name = models.CharField(max_length=2000)

    class Meta:

        db_table = 'dept'
 

 

ビュー

users = User.objects.filter(user_id=1).select_related('dept')

 

テンプレート

{{ user.user_id }}

{{ user.dept.dept_id}}

上がuserテーブルのカラム。

下がdeptテーブルのカラム。