Если у вас есть какая-то модель:Джанго - оптимизация вопрос
class Teacher(models.Model):
name = models.CharField(max_length=50)
class Student(models.Model):
age = models.PositiveIntegerField()
teacher = models.ForeignKey(Teacher, related_name='students')
и использовать его как это:
>>> student = Student.objects.get(pk=1)
>>> student.teacher.name # This hits the database
'Some Teacher'
>>> student.teacher.name # This doesn't (``teacher`` is cached on the object)
'Some Teacher'
Это потрясающе. Django кэширует связанный объект, чтобы вы могли использовать его снова, без необходимости использовать вашу базу данных.
Но, если использовать его как это:
>>> teacher = Teacher.objects.get(pk=1)
>>> for student in teacher.students.all(): # This hits the database
... print(student.age)
...
8
6
>>> for student in teacher.students.all(): # This does too (obviously)
... print(student.age)
...
8
6
Там нет кэширования или эффективный доступ к соответствующим объектам это направление.
Мой вопрос таким образом: Есть встроенный (или не проблематичен способ) для объектов, связанных с отсталым доступом эффективным способом (кэшировать путь), как вы можете в student.teacher
примере выше?
Причина Я хочу это потому, что у меня есть модель с несколькими методами, которым необходим доступ к тем же объектов, связанных с снова и снова, так что страница, которая должна иметь 12 запросов заканчивается около 30.
отлично! Каждый раз, когда я сталкиваюсь с новой проблемой, вы сталкиваетесь с той же проблемой задолго до меня. Ты похож на моего мистера Мияги, хотя по иронии судьбы, твое имя - Даниэль. Еще раз спасибо. – orokusaki 2010-11-27 19:21:36
В этом случае функция select_related() не работает? – jMyles 2010-11-27 20:20:48