我正在使用 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()。)
