0
我有三個型號(A,B,C)和我需要加入他們的行列,像這樣:Django的ORM加入三個表
模型模型B PK1一個FK1然後B型fk1至型號C.
它正在連接表,但沒有正確連接它們。我可以加入模型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'
它說「無法解析關鍵字」表'字段「(特別是表B) – Zorpho
@Zorpho你可以顯示模型? – vd1
我更新了模型的原始問題,並修改了我試圖做的sql。第一個表在表B中具有fk到pk,然後表B中的不同字段對錶C中的字段具有fk。 – Zorpho