2013-03-18 3 views
0

django 프로젝트를 작업하고 호출 속도를 높이려고합니다. Django는 외래 키 관계를 제거하기 위해 두 번째 쿼리를 자동으로 수행합니다. 내가 전화 할 때 다음Django가 외래 키 조회를 지연합니다.

p1 = Person("Bob") 
address1 = Address(p1) 
print (p1.id) #let it be 1 cause it is the first entry 

을 : 다음

Model Person: 
    name = model.CharField("blah") 

Model Address: 
    person = model.ForeignKey(Person) 

내가합니다

address1.objects.filter(person_id = "1") 

를 내가 얻을 :

쿼리 # 1 : SELECT 예를 들어 내 모델처럼 보이는 경우 address. id, address.person_id FROM address

쿼리 # 2 : SELECT person. id, person.name FROM person

두 번째 호출 인 질의 # 2를 없애고 싶습니다. 나는 장고 문서에서 "지연"을 사용하여 시도했지만, 작동하지 않았다. (사실 더 많은 호출을 만든다.) "가치"는 가능성이 있지만 실제로는 더 많은 분야를 끌어 들이고 있습니다. 내가하고 싶은 유일한 목적은 외래 키를 평가하는 것이 아닙니다. person_id를 다시 가져 오게되어 기쁠 것입니다. 이는 Django가 모든 외래 키를 평가하기 때문에 Address.objects.all()과 같은 명령을 수행 할 때 특히 런타임을 단축시킵니다.

답변

0

같은 질문에 대한 다른 질문을 만난 후 ForeignKey 필드를 참조하는 __unicode__ 메서드를 정의한 것으로 생각합니다. 셸의 일부 개체를 쿼리하여 출력 할 경우 __unicode__ 메서드가 호출되어 ForeignKey를 가져 오는 쿼리가 필요합니다. 해결책은 해당 방법을 다시 작성하여 해당 참조가 필요 없도록하거나, 또는 다른 질문에서 말한대로 select_related()을 사용하는 것입니다.

다음번에는 실제로 발생한 문제를 나타내는 코드를 포함하여 전체 코드를 제공해주십시오.

+0

내 __unicode__이 self.house.id를 참조한 것으로 나타났습니다. 그것은 문제를 해결하는 것처럼 보였습니다! 감사. 나는 충분한 명성 때문에 upvote 할 수없는 사람들은 이것을 upvote 할 수있다! – user1639926

+0

감사합니다. 여전히 답을 수락 할 수 있습니다. –