如何在Django模板中将QuerySet转换为列表并格式化显示?
解决Django模板中QuerySet显示格式问题
方法1:用内置join过滤器快速实现
你的Building模型已经在__str__方法中返回了Building_code,直接用Django的join过滤器就能把QuerySet里的元素拼接成指定格式:
修改模板代码如下:
{% with allbuilding=hira.Building.all %} <td>{{ allbuilding|join:", " }}</td> {% endwith %}
这个过滤器会自动调用每个Building对象的__str__方法,把返回的编码用, 连接,最终显示成13, 14这样的无标识格式。
方法2:在模型中定义属性实现灵活格式
如果后续需要用BuildingFullName(比如13 | 办公楼, 14 | 仓库)这类格式,可以在Hira模型中添加一个自定义属性:
class Hira(models.Model): # 你的其他字段... Building = models.ManyToManyField(Building) @property def building_list(self): # 用Building_code拼接 return ", ".join([b.Building_code for b in self.Building.all()]) # 如果要用全名,替换成下面这行: # return ", ".join([b.BuildingFullName for b in self.Building.all()])
然后在模板里直接调用这个属性:
<td>{{ hira.building_list }}</td>
方法3:模板循环手动控制拼接
如果需要更精细的格式控制(比如避免最后一个元素后加逗号),可以用模板循环实现:
<td> {% for building in hira.Building.all %} {{ building.Building_code }}{% if not forloop.last %}, {% endif %} {% endfor %} </td>
这种方式适合需要自定义分隔符或添加额外样式的场景。
内容的提问来源于stack exchange,提问作者Arklines
相关产品推荐
相关产品推荐

