我是Django的初学者。
我有这三个班
class Escape(models.Model):
name = models.CharField(max_length=100, unique=False)
def __str__(self):
return self.name
class Salle(models.Model):
salle = models.CharField(max_length=100, unique=False)
escape = models.ForeignKey(Escape, on_delete=models.CASCADE)
def __str__(self):
return self.salle
class Enigme(models.Model):
enigme_name = models.CharField(max_length=100, unique=False)
salle = models.ForeignKey(Salle, on_delete=models.CASCADE)
def __str__(self):
return self.enigme_name
我尝试在模板中显示每个 salle 的 enigme 列表。我无法弄清楚如何构建视图以显示每个Salle的每个Enigme。
这是我的观点:
def salle_escape(request):
escape_named = 'NumW'
list_salle = Salle.objects.filter(escape__name=escape_named)
enigme = []
for e in list_salle:
enigme.append( Enigme.objects.filter(salle__salle=e) )
# enigme = Enigme.objects.filter(salle__salle=
context = {
'escape' : Escape.objects.get(name=escape_named),
'salle' : list_salle,
'enigme' : enigme,
}
return render(request, 'chat/salle_escape.html', context)
这是我的模板:
<!-- chat/templates/chat/room.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Chat Room</title>
</head>
<body>
<h1>{{ escape.name }}</h1>
<h2>Liste des salles</h2>
<ul>
{% for s in salle %}
<li>{{ s.salle }} {{ forloop.counter0 }}</li>
{% endfor %}
</ul>
{{ enigme }}
</body>
</html>
在我的浏览器中显示的{{enigme}}如下:
[<QuerySet [<Enigme: Lanterne>, <Enigme: Coussin>, <Enigme: Biblot>]>,
<QuerySet [<Enigme: Operation>, <Enigme: Cle triangle>, <Enigme: Miroir>, <Enigme: Lumiere>]>,
<QuerySet [<Enigme: Oiseau>, <Enigme: Epingle>]>]
谢谢您能带给我帮助!
答案 0 :(得分:0)
如果您尝试显示每个Enigme
的每个Salle
集,则可以进行反向查找。您应该能够在模板中完成此操作:
{% for s in salle %}
<li>{{ s.salle }} {{ forloop.counter0 }}</li>
{% for enigme in s.enigme_set.all %}
<li>{{ enigme }}</li>
{% endfor %}
{% endfor %}
您可以访问相关的Enigme
对象,而无需在视图中进行设置。作为初学者,我建议您阅读Django文档的this部分。