Py学习  »  Django

Django如何在模板中设置model1.model2.all()?

Julien Mertz • 5 年前 • 1587 次点击  

我正在构建一个网站,我有两个模型,我们称之为Model1和Model2,Model2有一个指向Model1的foreignKey属性。我有一个模板,在这个模板中,我可以访问数据库Model1表中所有条目的列表。我要做的是对所有与特定条目model1相关联的条目model2执行for循环。 在某种意义上,我可以做到: for model2 in model1.model2_set.all(): 但我怎样才能在模板中做到这一点呢? 我试过了 {% for model2 in model1.model2_set.all %} 但那不管用。

提前谢谢!

编辑: 模型.py

class Plat(models.Model):
    titre = models.CharField(max_length = 100)
    description = models.TextField(null = True)
    allergenes = models.TextField(null = True)
    prix = models.IntegerField(verbose_name = "Prix par portion")
    chef = models.ForeignKey('inscription.Chef', on_delete = models.CASCADE)
    date_prep = models.DateTimeField(default=timezone.now, verbose_name="Date et heure de préparation")
    nb_portions = models.IntegerField(verbose_name = "Nombre de portions disponibles")
    photo = models.ImageField(upload_to = "photos_plat/")
    is_ordered = models.BooleanField(default=False)

    class Meta:
        verbose_name = "Plat"
        ordering = ['date_prep']

    def __str__(self):
        return self.titre


class Commande(models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    plat = models.ForeignKey('Plat', on_delete = models.CASCADE) # models.PROTECT pour pas supprimer, models.CASCADE pour supprimer.
    nb_portions = models.IntegerField(verbose_name = "Nombre de portions")
    date = models.DateTimeField(verbose_name="Date de commande")
    livraison = models.BooleanField(default=False)
    adresse_livraison = models.CharField(max_length = 100, verbose_name = "Adresse de livraison", blank = True)

    class Meta:
        verbose_name = "Commande"
        ordering = ['date']

模型1是Plat,模型2是command

视图.py

def mes_plats(request):
    return render(request, 'actualites/mes_plats.html', {'my_meals': Plat.objects.filter(chef=request.user.useradvanced.chef, date_prep__gte = date.today())})

mes_plats.html

{% for plat in my_meals %}
   {% if plat.is_ordered %}
      <ul>
      {% for commande in plat.commande_set.all %}
          <li> {{ commande.user.useradvanced }} : {{ commande.nb_portions}} portions.</li>
      </ul>
   {% else %}
      Ce plat n'a pas encore été commandé par un utilisateur.
   {% endif %}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52194
 
1587 次点击  
文章 [ 1 ]  |  最新文章 5 年前