ORM Django (версия 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, это кэширование на родительском уровне бесполезно.
Есть идеи, как это решить?
Я дошел до того, что понял, что есть ForeignRelatedObjectsDescriptor и ReverseSingleRelatedObjectDescriptor.