Django如何在查询集的模板列表中使用

时间:2019-01-07 15:07:48

标签: python django django-templates django-views

我是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>]>]

谢谢您能带给我帮助!

1 个答案:

答案 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部分。