2011-11-16 4 views
6

django를 사용하여 객체를 검색하는 경우 .select_related()를 사용하여 django가 모든 외래 키 객체를 얻도록 지시 할 수 있습니다.django : 이미 존재하는 객체에서 select_related()?

obj = ModelClass.objects.select_related().get(id=4) #1 db hit 
foo = obj.long.chain.of.stuff #no db hit 

.select_related()가없는 obj이 이미 있으면 .select_related()입니다. :

def doit(obj): 
    obj.long.chain.of.stuff #4 db hits 

거기에 모든 외래 키 관계를 채울 장고를 얻을 수있는 방법은 무엇입니까? 뭔가 같은 :

def doit(obj): 
    obj.magic() #1 db hit 
    obj.long.chain.of.stuff #no db hits 

답변

3

나는 내가 할 수 있다고 생각 :

def doit(obj): 
    obj = obj.__class__.objects.select_related().get(id=obj.id) #1 db hit 
    obj.long.chain.of.stuff #no db hits 

그러나 어떤 더 좋은 방법이?

+2

나는 그것이 유일한 방법 일 것이라고 생각합니다. 나는 약간의 코드를 언급 했으므로, 나중에 그것을 본 누군가는 왜 그것이 이루어 졌는지 궁금해하는 머리를 긁지 않을 것이다. –

관련 문제