Skip to main content
 首页 » 编程设计

Python Django 模型执行连接查询

2025年05月04日31yjmyzz

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

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

 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 文件中我有:(我删除了 Bootstrap 代码以使其更具可读性)

   <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 进行更改以使其启用 show all home.html 中的子类型而不是 --inner 循环

提前致谢

请您参考如下方法:

除了获取类型外,您无需在 View 中执行任何操作:

types = Type.objects.all() 

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

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

请注意,本教程对此进行了很好的介绍。 (就像使用 render 快捷方式而不是单独加载和渲染模板一样。)

(其实我一开始说的不太对:为了效率,可以在Type查询中加入prefetch_related()。)