django: select_related() 在一个已经存在的对象上?
Posted
技术标签:
【中文标题】django: select_related() 在一个已经存在的对象上?【英文标题】:django: select_related() on an already-existing object? 【发布时间】:2011-12-30 17:11:43 【问题描述】:如果我正在使用 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】:我想我可以做到:
def doit(obj):
obj = obj.__class__.objects.select_related().get(id=obj.id) #1 db hit
obj.long.chain.of.stuff #no db hits
但是有没有更好的方法呢?
【讨论】:
我认为这将是您唯一的方法。不过,我会确保对那段代码进行注释,这样以后看到它的任何人都不会挠头想知道为什么这样做,或者更糟糕的是,删除它,因为它看起来多余。以上是关于django: select_related() 在一个已经存在的对象上?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用'select_related'从相关(ForeignKey)django模型中接收并非所有字段
Django:select_related() 的用法和执行时间性能
django 2.1 上的 select_related 不工作