【发布时间】:2010-09-15 11:50:11
【问题描述】:
Django 的 ORM(版本 1.2.3)在来回跟踪外键时不保留身份。最好用一个例子来解释:
class Parent(models.Model):
pass
class Child(models.Model):
parent = models.ForeignKey(Parent)
parent = Parents.objects.get(id=1)
for child in parent.child_set.all():
print id(child.parent), "=!", id(parent)
因此,对于每个子节点,都会从数据库中重新获取父节点,即使我们在获取子节点时就知道父节点。这对我来说是违反直觉的。
在我的情况下,这也会导致性能问题,因为我在父级别执行了一些繁重的操作,我想在对象实例级别缓存这些操作。但是,由于这些计算的结果是通过 child => parent 链接访问的,因此在 parent 级别进行缓存是没有用的。
关于如何解决这个问题的任何想法?
我已经弄清楚有一个 ForeignRelatedObjectsDescriptor 和一个 ReverseSingleRelatedObjectDescriptor。
【问题讨论】:
标签: django django-models