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的最佳方法?

子类化 Django ListView

Django通用类视图实现忘记密码重置密码功能

从 django 中的模型字段在 ListView 中创建列表

在 Arraylist 的 listview 的 listitem 上显示值