2011-11-16 10 views
6

私はジャンゴを持つオブジェクトを取得していた場合、私はウィットに、だけでなく、すべての外部キーのオブジェクトを取得するにはジャンゴを指示する.select_related()を使用することができます: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を持っている場合は、ということは次のとおりです。

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

は、その外部キー関係の全てを埋めるためにはDjango取得する方法はありますか?ような何か:

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

私はあなたの唯一の方法だと思う。私はコードのビットをコメントすることを確認したいので、後でそれを見ている人は、それが冗長に見えるので、それが行われた理由を疑問に頭を傷つけることはありません。 –

関連する問題