0
세 개의 테이블을 조인 (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'
장고 코드 :
TableA.objects.select_related('field1').filter(field2=var).prefetch_related('char1').values('field1', 'field2', 'char1', 'char1__var1', 'char1__var2')
장고의 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