我正在尝试遍历不同的区域,然后显示属于该区域的项目
Zone是一个模型,具有名称和ForeignKey。 Planche是具有Zone作为ForeignKey的模型。
我正在遍历区域以显示每个区域。在该循环中,我循环所有Planches,并且只想显示具有Zone作为ForeignKey的那些。
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%}语句中的字符串,但是我一直失败
最佳答案
我假设您要显示每个区域的所有方案。您可以使用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 %}
请注意,除非您在选择
prefetch_related('planche')
的视图中添加zones
,否则该方法将执行N + 1个查询(一个用于选择区域,然后每个区域一个查询以检索每个区域的平面)。参考文献:
Official documentation about backward relationships
What is `related_name` used for in Django?
关于python - Django模板,如果项的ID等于父循环名,则遍历所有项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54387499/