Django中如何去除QuerySet渲染的模型标识并生成有序列表?
解决Django模板中Iscrizione对象显示问题并生成有序列表
看起来你现在遇到的问题是Django模板里直接打印查询集对象时,会显示模型类名加属性的默认字符串格式,而且需要把这些数据转成有序列表。我来给你分两步解决:
1. 优化视图层(可选但推荐)
你当前的视图代码里,appello的定义有点冗余,把查询集转成列表其实没必要——Django模板可以直接遍历查询集。我们先把视图代码简化得更清晰:
def appelli(request, corso_id): # 获取对应的课程对象 corso = Corso.objects.get(pk=corso_id) # 直接获取该课程下的所有报名记录查询集 iscrizioni = Iscrizione.objects.filter(corso1_id=corso) # 把查询集传给模板,变量名更直观 return render(request, 'corsi/appello.html', {'iscrizioni': iscrizioni})
2. 模板层处理:生成有序列表并去掉Iscrizione标识
这里有两种实用方式,选一种适合你的:
方式一:修改模型的__str__方法(一劳永逸)
打开你的models.py,找到Iscrizione模型,修改它的__str__方法,让它返回你想要显示的内容(比如那个VFEW对应的字段,假设是codice字段):
class Iscrizione(models.Model): # 你的其他字段定义 codice = models.CharField(max_length=10) # 替换成你实际的字段 corso1 = models.ForeignKey(Corso, on_delete=models.CASCADE) def __str__(self): # 返回你想在模板里显示的内容 return self.codice
然后在模板里直接用有序列表标签遍历查询集:
<ol> {% for iscrizione in iscrizioni %} <li>{{ iscrizione }}</li> {% endfor %} </ol>
方式二:直接在模板里访问对象的具体字段(无需改模型)
如果你不想修改模型的__str__方法,也可以在模板里直接指定要显示的字段:
<ol> {% for iscrizione in iscrizioni %} <li>{{ iscrizione.codice }}</li> <!-- 替换成你实际要显示的字段名 --> {% endfor %} </ol>
如果不想修改视图(保留原变量)
如果你暂时不想改动视图代码,原来的appello.0是报名记录的列表,那模板里可以这么写:
<ol> {% for item in appello.0 %} <li>{{ item.codice }}</li> <!-- 替换成实际字段名,或改模型__str__后用{{ item }} --> {% endfor %} </ol>
这样就能生成干净的有序列表,不会再出现<Iscrizione: ...>的标识啦~
内容的提问来源于stack exchange,提问作者Ro0t
相关产品推荐
相关产品推荐

