Python Django模型执行连接查询

时间:2014-03-19 12:34:50

标签: python django join django-models

我正在开发一个使用Django框架的应用程序,我是新手

我需要创建一个简单地连接2个表(类型和子类型)的查询,然后在模型文件的视图中使用结果:

 class Type(models.Model):
     name = models.CharField(max_length=60)
    description = models.CharField(max_length=200)       

 class SubType(models.Model):
    name = models.CharField(max_length=60)
    description = models.CharField(max_length = 200)
    Type = models.ForeignKey(Type)

在home.html文件中我有:(我删除了引导代码以使其更具可读性)

   <ul>
        <li ><a href="/home" >Home Page</a></li>
        {% for type in all_types %}
        <li >
          <a href="#">{{ type.name }} </a>
            <ul >
                --The Inner Loop-- 
            </ul>               
        </li>  
        {% endfor %}                      
    </ul>

我需要创建一个类型列表,然后在每个类型中我需要创建另一个包含每种类型的子类型的列表

我不知道如何在views.py

中创建查询
 def index(request):
       list_all_types = #Here I have to create a join query via django models
       t = loader.get_template('home.html');
       c = Context({
            'all_types' : list_all_types,
       });
       return HttpResponse(t.render(c));

因此,请告诉我如何进行查询并使用views.py中的注释部分替换正确的代码,以及我必须添加哪些更改才能使home.html启用以显示所有内容homeType中的subTypes而不是--inner循环

提前致谢

1 个答案:

答案 0 :(得分:1)

除了获取类型之外,您不需要在视图中执行任何操作:

types = Type.objects.all()

在模板中,您只需遍历type.subtype_set.all

        <ul>
            {% for subtype in type.subtype_set.all %}
                <li>{{ subtype.name }}</li>
            {% endfor %}
        </ul>

请注意,本教程已详细介绍了这一点。 (正如使用render快捷方式而不是单独加载和呈现模板一样。)

(实际上,我刚才所说的并不完全正确:为了提高效率,您可以将prefetch_related()添加到Type查询中。)