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