Django-fr

Forum

#1 06-03-2018 20:21:39

cobra85
Membre
Inscription : 11-05-2015
Messages : 58

Boucle for et affichage de résultats

Bonjour,

Je cherche a afficher le nom de personne en fonction de leur ID. J'utilise la table User de Django pour m'authentifier.
La boucle for fonctionne bien, dans le terminal j'ai bien les résultats des ID sous cette forme:

p.id
1
p.id
2

qui s'affiche mais dans le template, je n'en ai qu'un seul résultat, le premier, alors que j'aimerai en plusieurs

Savez-vous pourquoi ?

Merci

Models.py
-------------

class Mission(models.Model):
    nom = models.ManyToManyField(Identite, blank=True, null=True)
    dsx = models.CharField(max_length=7, blank=True, default='', null=True)
    pays = models.ForeignKey(Pays)
    ville = models.CharField(max_length=15, null=True)
    date_depart = models.DateField(blank=True, null=True)
    date_retour = models.DateField(blank=True, null=True)
    vol = models.TextField(blank=True, default='', null=True)
    etat = models.BooleanField(default=False)
    document = models.ManyToManyField(Typedoc, null=True)
    #document = models.ManyToMany(Document, null=True)
    fichenavette = models.TextField(null=True)
    source = models.CharField(max_length=20, blank=True, default='', null=True)

class Assurance(models.Model):
    nom = models.ForeignKey(User, null=True)
    type_assurance = models.CharField(max_length=20)
    num_contrat = models.CharField(max_length=10)
    nom_assurance = models.CharField(max_length=10)
    validite = models.DateField(blank=True, null=True)
    acquereur = models.CharField(max_length=20, blank=True, null=True)
    repondant = models.CharField(max_length=20, blank=True, null=True)

views.py
-----------

#idm = id de la mission

def detail_mission(request,idm):
    identite = Identite.objects.all()

    missionss = Mission.objects.filter(id=idm)

    missions = Mission.objects.filter(id=idm)
    print missions.query
    for mission in missions:
        for p in mission.nom.all():
            print "p.id"
            print p.id

            assurance = Assurance.objects.all().filter(nom_id=p.id)
        return render(request, 'detail_mission.html', {'identites': identite, 'missions':missionss, 'assurances':assurance})

templates
------------

{% if assurances %}
<table>
              <thead>
                        <tr>
                                        <th>nom:</th>
                                        <th>Nom de l'assurance:</th>

                        </tr>
              </thead>
              <tbody>
                        <tr>{% for assurance in assurances %}

                            <td>{{ assurance.nom }}</td>
                            <td>{{ assurance.nom_assurance }}</td>

                        </tr>{% endfor %}
              </tbody>
</table>{% endif %}

Merci à vous

Hors ligne

#2 11-03-2018 18:43:59

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Boucle for et affichage de résultats

L'ordre de "<tr>{% for assurance in assurances %}" me semble suspect. Il n'y aura qu'un seul tag d'ouverture <tr> mais autant de fermeture </tr> que d'assurance.

Hors ligne

#3 11-03-2018 21:23:05

cobra85
Membre
Inscription : 11-05-2015
Messages : 58

Re : Boucle for et affichage de résultats

Bonjour,

J'ai testé en supprimant les balises liées au tableau. Mais cela ne change rien.

Un collège m'a conseillé de créer une liste vide entre les deux boucles for dans ma vue

assurance =[]

Et de mettre un .append dans la suite, du code mais je ne sais pas trop où.

Hors ligne

Pied de page des forums