首页 > 解决方案 > 如何在django中获取每个对象(干预)多对多关系的对象(设备)列表

问题描述

型号设备:

    class Equipement(models.Model):
        nom_equipement=models.CharField(max_length=60)
        qte_stock=models.IntegerField()
        panne=models.ManyToManyField(Panne)

模型干预:

    class Intervention(models.Model):
        Titre_intervention = models.TextField(max_length=255)
        date_intervention = models.DateField(auto_now_add=True)
        type_panne = models.ForeignKey(Panne,on_delete=models.CASCADE)
        etat = models.CharField(max_length=30)
        description = models.TextField(max_length=255)
        image = models.ImageField(blank=True,null=True,upload_to='medial/%Y/%m/%D')
        equipements = models.ManyToManyField(Equipement)
        clients = models.ForeignKey(Client,on_delete=models.CASCADE,default=True)

模型干预与多对多关系:

所以当我添加一个新的“干预”时,它会添加到关联表中

在此处输入图像描述

我需要列出每次干预的所有设备这是我的观点:

    def mes_intervention(request):
            if 'id_client' in request.session:
                get_idClient=request.session['id_client']
                Interv_client = Intervention.objects.all().filter(clients=get_idClient)

                context = {
                    'intervention':Interv_client
                    }

                return render(request, 'clients/mes-intervention.html',context)

这就是我在模板 html 中列出所有干预的地方

在此处输入图像描述

标签: djangomodelmany-to-manymanytomanyfield

解决方案


作为旁注,您的复数和单数有点混淆。外键指向一个模型:

  • client = models.ForeignKey(Client,on_delete=models.CASCADE,default=True) # singular

一个查询集返回多个对象:

  • context = { 'interventions': Interv_client}

虽然不能在模板中调用带参数的函数,但可以调用不带参数的对象方法。所以,你实际上可以这样做:

{% for item in interventions %}
   ...
   {% for equipment in item.equipements.all %}
       {{ equipment.qte_stock }}
   {% endfor %}
{% endfor %}

推荐阅读