Django通用ListView两个型号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django通用ListView两个型号相关的知识,希望对你有一定的参考价值。
在django模板中,我需要使用两个不同的信息迭代两个模型,但在for
内部进行嵌套循环for
认为这是错误的。此外,模板中的此代码不起作用。我创建了两个引用相同模板的视图。
模板里面每个模块应该是它自己的孩子。
{% if all_modules %}
{% for module in all_modules %}
<li><a class="scrollto" href="">{{ module.name }}</a>
<ul class="nav doc-sub-menu v">
{% for child in all_childs %}
<li><a class="scrollto" href="#step1">{{ child.name }}</a></li>
{% endfor%}
</ul>
</li>
{% endfor %}
{% else %}
<li><a class="scrollto" href="">None</a></li>
{% endif %}
在观点中
class BackendModulesListView(generic.ListView):
template_name = 'backend_modules.html'
model = BackendModules
context_object_name = 'all_modules'
class ChildsListView(generic.ListView):
template_name = 'backend_modules.html'
model = Child
context_object_name = 'all_childs'
queryset = Child.objects.filter(backend_modules_id=1)
在模型中
class Child(models.Model):
name = models.CharField(max_length=255)
backend_modules = models.ForeignKey(BackendModules, null=True, blank=True,
related_name='backend')
frontend_components = models.ForeignKey(FrontendComponents, null=True, blank=True,
related_name='frontend')
请帮我找到解决方案并优化代码。我知道我写错了代码:(
答案
根据我的理解,您正在尝试迭代all_modules,并且对于all_modules中的每个实例,您都试图迭代其中的all_childs。要做到这一点,你不需要创建2个视图,因为你可以使用ForeignKey反向关系。所以你的模板应该是这样的:
backend_modules.html
{% if all_modules %}
{% for module in all_modules %}
<li><a class="scrollto" href="">{{ module.name }}</a>
<ul class="nav doc-sub-menu v">
{% for child in module.child_set.all %}
<li><a class="scrollto" href="#step1">{{ child.name }}</a></li>
{% endfor%}
</ul>
</li>
{% endfor %}
{% else %}
<li><a class="scrollto" href="">None</a></li>
{% endif %}
以上是关于Django通用ListView两个型号的主要内容,如果未能解决你的问题,请参考以下文章
Android App 在片段中创建 ListView 引用时关闭
Django:将过滤(和排序)添加到基于(通用)类的ListView的最佳方法?