Cla*_*diu 7 python sql database django performance
如果我使用django检索对象,我可以.select_related()
用来指示django获取所有外键对象,例如:
obj = ModelClass.objects.select_related().get(id=4) #1 db hit
foo = obj.long.chain.of.stuff #no db hit
Run Code Online (Sandbox Code Playgroud)
如果我已经拥有obj
,没有它.select_related()
,那就是:
def doit(obj):
obj.long.chain.of.stuff #4 db hits
Run Code Online (Sandbox Code Playgroud)
有没有办法让django填补所有的外键关系?就像是:
def doit(obj):
obj.magic() #1 db hit
obj.long.chain.of.stuff #no db hits
Run Code Online (Sandbox Code Playgroud)
我想我可以这样做:
def doit(obj):
obj = obj.__class__.objects.select_related().get(id=obj.id) #1 db hit
obj.long.chain.of.stuff #no db hits
Run Code Online (Sandbox Code Playgroud)
但是有没有更好的方法呢?