2012-07-09 71 views
0

让我们考虑,我们在一个分层形式三个表:Django的,查询数据时,我们有表层次

Course 
    Topic 
     Sub-Topic 

或代码:

class Course(models.Model): 
    name   = models.CharField(max_length = 100) 

class Topic(models.Model): 
    name   = models.CharField(max_length = 100) 
    course   = models.ForeignKey('Course' , null = True , blank = True) 

class SubTopic(models.Model): 
    name   = models.CharField(max_length = 100) 
    topic   = models.ForeignKey('Topic' , null = True , blank = True) 

我想要的是让在树中表示的课程,主题和子主题列表,如导航系统。

我知道select_related()可以按照在任何深度发现ForeignKeys。我如何在我的场景中使用该功能?

回答

1

如果你只是想输出到一个模板,你可以使用_set例如如果你将一系列课程传递给你的模板。

{% for c in courses %} 
    {{c.name}} 
    {% for t in c.topic_set.all %} 
     {{t.name}} 
     {% for st in t.subtopic_set.all %} 
      {{st.name}} 
     {% endfor %} 
    {% endfor %} 
{% endfor %} 
+0

不错..所以我只需要使用'Course.objects.select_related()'或类似的视图取得课程,并将它们传递给模板..对吗? – Soask 2012-07-09 12:01:23

+1

Course.objects.all()会这样做,select_related只是预先获取相关的FK数据,而不是稍后访问它时。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related – JamesO 2012-07-09 12:05:39