당신은 일부 모델의 경우 :장고 최적화 질문
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
이 경우 select_related()가 작동하지 않습니까? – jMyles
@Justin - 아니,'select_related'는'OneToOne' 관계에서만 역으로 작동하고 Django 1.2 +에서만 작동합니다. – orokusaki