문제

나는 조인트베이스의 일부 데이터와 함께 많은 관계 테이블이 있습니다.

내 모델의 기본 버전은 다음과 같습니다.

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top