0
3つのテーブルを結合する(A、B、C)と私はそうのようにそれらを結合する必要があります。ジャンゴORM私は三つのモデルを持っている
モデルモデルC.
にBのPK1をモデル化するためにFK1、その後、モデルBのFK1をテーブルを結合していますが、正しく結合していません。モデルaからbに参加することはできますが、最初の結合後に最後のテーブル(c)からフィールドを引き出すことはできません。
作品サンプルSQL:
select a.field1, a.field2, b.char1, b.char2, c.var1, c.var2
from TableA a
inner join TableB b
on a.field1 = b.char1
left join TableC c
on b.char2 = c.var1
where a.field2 = 'number'
のDjangoコード:
TableA.objects.select_related('field1').filter(field2=var).prefetch_related('char1').values('field1', 'field2', 'char1', 'char1__var1', 'char1__var2')
Djangoのmodels.py:
class TableA(models.Model):
field2 = models.CharField(db_column='FIELD2', max_length=8, primary_key=True) # Field name made lowercase.
field1 = models.ForeignKey('TableB', db_column='FIELD1', max_length=6) # Field name made lowercase.
class Meta:
managed = False
db_table = 'TableA'
class TableB(models.Model):
char1 = models.CharField(db_column='CHAR1', max_length=6) # Field name made lowercase.
char2 = models.ForeignKey('TableC', db_column='CHAR2', max_length=6, primary_key=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'TableB'
class TableC(models.Model):
var1 = models.CharField(db_column='VAR1', max_length=6, primary_key=True) # Field name made lowercase.
var2 = models.CharField(db_column='VAR2', max_length=50) # Field name made lowercase.
class Meta:
managed = False
db_table = 'TableC'
「キーワード 'テーブル'をフィールドに解決できません」(特にTableB) – Zorpho
@Zorphoモデルを表示できますか? – vd1
元の質問をモデルで更新し、やりたいSQLを修正しました。最初の表は表Bのfkからpkを持ち、表Bの別のフィールドは表Cのfkから項目を持っています。 – Zorpho