我在理解如何使用Django跟踪多个层次的关系方面有点困难。显然,我可以使用for
循环,但我正试图找到一种更有效的方法来实现它(可能求助于原始SQL)。模型大致如下:
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执行此操作:
^{pr2}$有没有办法做到:
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')
如果SQL查询将启动
SELECT * FROM Model ...
,那么Django查询通常应该启动Model.objects.filter(...)
。所以在这种情况下,你需要的是:相关问题 更多 >
编程相关推荐