3
장고를 사용하여 여러 수준의 관계를 수행하는 방법을 이해하는 데 어려움을 겪고 있습니다. 분명히 내가 for
루프를 사용할 수 있지만 더 효율적인 방법을 찾으려고 노력하고있다. (아마도 원시 SQL에 의지하고있다). 이 모델은 대략입니다 : 그들은 외부 키를 통해 연결하고Django 일대일 관계 따라하기
Subject -> Course -> Module -> Question
(예를 들어, Question
모듈은 Module
에 외래 키 포인팅이있다).
다음 작품,하지만 확실히 좋지 않은 매우 느리고 :
subject = "Mathematics"
courses = Subject.objects.get(name__iexact=subject).course_set.all()
avg_scores = []
for course in courses:
modules = course.module_set.all()
for module in modules:
questions = module.question_set.all().filter(num_attempts__gt=20).filter(avg_score__gt=0).exclude(avg_score__isnull=True).order_by('avg_score')
for question in questions:
avg_scores.append(question)
내가 사용하는 SQL이 작업을 수행 할 수있는 작업은 다음과 같습니다
SELECT * FROM question
INNER JOIN module
ON question.module_id=module.id
INNER JOIN course
ON module.course_id=course.id
INNER JOIN subject
ON course.subject_id = subject.id
WHERE subject.name="Mathematics"
AND num_attempts > 20
AND avg_score > 0
같은 뭔가를 할 수있는 방법이 있나요 : 당신의 SQL 쿼리
SELECT * FROM Model ...
을 시작한다면
avg_scores = Subject.objects.get(name__iexact="Mathematics").course_set.module_set.question_set.filter(num_attempts__gt=20).filter(avg_score__gt=0).exclude(avg_score__isnull=True).order_by('avg_score')
감사합니다! 나는 의사의 바른 분야를보고 있지 않았다. 미래의 독자들을 위해, 문서는 다음과 같습니다 : https://docs.djangoproject.com/en/dev/topics/thy-span-relationships 이것은 'for' 루프보다 빠릅니다. 명백한 이유 :-) –