我正在开发一个使用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循环
提前致谢
答案 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查询中。)