Django通用ListView两个型号

问题描述 投票:0回答:1

在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')

请帮我找到解决方案并优化代码。我知道我写错了代码:(

python django django-templates
1个回答
0
投票

根据我的理解,您正在尝试迭代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 %}
© www.soinside.com 2019 - 2024. All rights reserved.