编程语言
首页 > 编程语言> > python – 为什么Django的RelatedManager不会在目标对象上缓存调用查找的对象?

python – 为什么Django的RelatedManager不会在目标对象上缓存调用查找的对象?

作者:互联网

如果我有以下型号:

class Fubar(models.Model):
    name = models.CharField()

class Related(models.Model):
    fubar = models.ForeignKey(Fubar)

如果我使用.related_set访问Related,我会期望ORM会神奇地缓存父Fubar对象:

fubar = Fubar.objects.all()[0]
related = fubar.related_set.all()[0]
related.fubar

这导致3个查询,我希望它只能得到2个,因为在这个上下文中,related.fubar可以被优化为我称之为RelatedManager的同一个对象.

解决方法:

虽然我不确定为什么这不起作用(除了魔法减少),你可以轻松避免额外的查询

fubar.related_set.select_related('fubar')[0]

标签:python,django,django-orm,django-related-manager
来源: https://codeday.me/bug/20190704/1377545.html