Django의 외부 조인 모델링
-
06-07-2019 - |
문제
나는 조인트베이스의 일부 데이터와 함께 많은 관계 테이블이 있습니다.
내 모델의 기본 버전은 다음과 같습니다.
class FooLine(models.Model):
name = models.CharField(max_length=255)
class FooCol(models.Model):
name = models.CharField(max_length=255)
class FooVal(models.Model):
value = models.CharField(max_length=255)
line = models.ForeignKey(FooLine)
col = models.ForeignKey(FooCol)
값이 존재하지 않는 경우 (기본적으로 채워지지 않은 값에 대한 널 값으로 fooval 테이블을 표시하려고하는 경우) 일반적인 SQL 일 것입니다.
SELECT value FROM FooCol LEFT OUTER JOIN
(FooVal JOIN FooLine
ON FooVal.line_id == FooLine.id AND FooLine.name = "FIXME")
ON FooCol.id = col_id;
django 모델을 사용하여 쿼리를 모델링하는 방법이 있습니까?
감사
해결책
SQL에는 "내비게이션"이 없기 때문에 외부 조인을 해킹으로 볼 수 있습니다.
당신이 가진 것은 간단한 if 진술 상황입니다.
for line in someRangeOfLines:
for col in someRangeOfCols:
try:
cell= FooVal.objects().get( col = col, line = line )
except FooVal.DoesNotExist:
cell= None
그것이 바깥 결합이 실제로 널 교체가있는 조회를 시도하는 것입니다.
유일한 최적화는 다음과 같습니다.
matrix = {}
for f in FooVal.objects().all():
matrix[(f.line,f.col)] = f
for line in someRangeOfLines:
for col in someRangeOfCols:
cell= matrix.get((line,col),None)
제휴하지 않습니다 StackOverflow