django:select_related()在已经存在的对象上?

时间:2011-11-16 18:49:10

标签: 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

如果我已经obj,而没有.select_related(),那就是:

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

1 个答案:

答案 0 :(得分:4)

我想我能做到:

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

但有没有更好的方式?