django: select_related () для уже существующего объекта? - PullRequest
7 голосов
/ 16 ноября 2011

Если я получаю объект с помощью 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 Ответ

4 голосов
/ 16 ноября 2011

Полагаю, я могу сделать:

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

Но есть ли лучший способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...