Django模板,如果项的ID等于父循环名,则遍历所有项

时间:2019-01-27 11:11:25

标签: python django

我试图遍历不同的区域,然后显示属于该区域的项目

区域是一个模型,具有名称和ForeignKey。 Planche是一个模型,其区域为ForeignKey。

我正在遍历区域以显示每个区域。在该循环中,我将循环所有Planches,并只想显示将Zone作为外键的那些。

class Zones(models.Model):
    name = models.CharField(max_length=30)
    genre = models.ForeignKey(ZoneTypes, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Planche(models.Model):
    pzone = models.ForeignKey(Zones, on_delete=models.CASCADE)
    ref = models.CharField(max_length=5, default="1")
    length = models.IntegerField()
    width = models.IntegerField()
    orientation = models.CharField(max_length=30)

    def __str__(self):
        return self.ref

模板

<div>
     <h1><a href="/">My list of planches</a></h1>
</div>
{% for z in zones %}
    <div>
        <h2><a href="/zone/{{ z.name }}">Zone name: {{ z.name }}</a></h2>
        {% for p in planches %}
        {% if p.pzone == z.name }
        <h1><a href="planche/{{ planche.ref }}">Ref: {{ p.ref }}</a></h1>
        <p>Length: {{ p.length }} - Width: {{ p.width }}</p>
        <p>Orientation: {{ p.orientation }}
        {% endif %}
        {% endfor %}
    </div>
{% endfor %}

{%,如果p.pzone = z.name%}返回False, 如果我只显示它们{{p.pzone}}和{{z.name}},它们都返回相同的字符串,但是我猜它们不是同一数据类型。我尝试将它们转换为{%with%}语句中的字符串,但我一直失败

2 个答案:

答案 0 :(得分:1)

我假设您要显示每个区域的所有板条。您可以使用related_name上的ForeignKey来访问引用当前对象的项目。您未在此处设置任何相关名称,因此它是默认名称:planche_set

<div>
     <h1><a href="/">My list of planches</a></h1>
</div>
{% for z in zones %}
    <div>
        <h2><a href="/zone/{{ z.name }}">Zone name: {{ z.name }}</a></h2>
        {% for p in z.planche_set.all %}
        <h1><a href="planche/{{ planche.ref }}">Ref: {{ p.ref }}</a></h1>
        <p>Length: {{ p.length }} - Width: {{ p.width }}</p>
        <p>Orientation: {{ p.orientation }}
        {% endfor %}
    </div>
{% endfor %}

请注意,除非您在选择{{1的视图中添加了prefetch_related('planche'),否则该方法将执行N + 1个查询(一个用于选择区域,然后每个区域一个查询以检索每个区域的板条)。 }}。

参考文献:

答案 1 :(得分:0)

如果要显示每个区域的筹划,则可以编写第二个循环,如下所示:

<div>
  <h1><a href="/">My list of planches</a></h1>
</div>
{% for z in zones %}
    <div>
        <h2><a href="/zone/{{ z.name }}">Zone name: {{ z.name }}</a></h2>
        {% for p in z.planche_set.all %}
        <h1><a href="planche/{{ planche.ref }}">Ref: {{ p.ref }}</a></h1>
        <p>Length: {{ p.length }} - Width: {{ p.width }}</p>
        <p>Orientation: {{ p.orientation }}
        {% endif %}
        {% endfor %}
    </div>
{% endfor %}

以下是另一则帖子中的示例:Django foreign key relation in template