2010-05-21 2 views
0

2 테이블, simpleDB_all 및 simpleDB_some이 있습니다. "모든"테이블에는 원하는 모든 항목에 대한 항목이 있지만 "일부"테이블에는 추가 정보가 필요한 일부 항목에 대한 항목 만 있습니다. 이들에 대한 장고 모델은 다음과 같습니다Django의 OneToOne 필드에 왼쪽으로 결합

class all(models.Model): 
    name = models.CharField(max_length=40) 
    important_info = models.CharField(max_length=40) 

class some(models.Model): 
    all_key = models.OneToOneField(all) 
    extra_info = models.CharField(max_length=40) 

가 나는 그것이 "일부"에있는 경우 추가 정보와 "모든"의 모든 항목을 표시하는 뷰를 생성하고 싶습니다.

allitems = all.objects.all() 
for item in allitems: 
    print item.name, item.important_info, item.some.extra_info 

을하지만 난 항목에 도착하면 "일부"테이블 I에 해당 항목이하지 않는 : 나는 1-1 필드를 사용하고 있기 때문에 나는 거의 완전한 성공이 작업을 수행 할 수 있습니다 DoesNotExist 예외를 얻습니다.

이상적으로 나는이 루프를 템플릿 내부에서 수행 할 것이므로 "try"절 주위를 감싸는 것은 불가능합니다. 이견있는 사람?

나는 다음과 같은 쿼리를 사용하여 SQL에서 직접 원하는 효과를 얻을 수 있습니다 :

SELECT all.name, all.important_info, some.extra_info 
    FROM all LEFT JOIN some ON all.id = some.all_key_id; 

그러나 나는 오히려 원시 SQL을 사용하지 것입니다.

답변

2

템플릿에서 DoesNotExist 예외가 발생하지 않습니다. 템플릿 시스템에 의해 의도적으로 숨겨져 있습니다.

당신에 지정한 SQL이 생성됩니다 무엇

, 더 많거나 적은, (당신 월부터 장고 1.2 r12307보다 최신 체크 아웃을 사용하는 경우) 당신은 당신의 쿼리 select_related를 사용할 때 :

allitems = all.objects.select_related('some') 
+0

이것은 효과가있을 수 있습니다. 제안을 주셔서 감사합니다 ... 내가 다시 응용 프로그램의 그 부분에 도착하면 자동으로 양식을 확인 "나는 옳은 일을"나는 돌아와서 대답으로 표시합니다. 감사. – jamida

관련 문제