Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Afficher deux champs de models dans un meme tableau sur un template

#1 03-05-2017 18:24:14

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

Afficher deux champs de models dans un meme tableau sur un template

Bonjour,

Je vous explique mon problème:
J'ai deux modeles, et souhaite afficher sur un même tableau (dans un template), les valeurs présentes dans le champ "nom" de chaque modeles ainsi qu'un système de pagination

models.py

class Adresse_ip(models.Model):
    ...
    nom = models.CharField(max_length=30, unique=True)
    pays = models.ForeignKey(Pays,blank=True, null=True)
    ...
    class Meta:
        ordering = ['nom']

    def __unicode__(self):
        return self.nom


class Nom_domaine(models.Model):
    ...
    nom = models.CharField(max_length=30, unique=True)
    hebergeur = models.CharField(max_length=15, blank=True)
    ...

    class Meta:
        ordering = ['nom']

    def __unicode__(self):
        return self.nom

pour cela j'ai tenté d'écrire la vue suivante:

from itertools import chain

def total(request):
    nomdomaine= Nom_domaine.objects.all().order_by("nom")
    adresseip = Adresse_ip.objects.all().order_by("nom")

    post = sorted(
        chain(nomdomaine, adresseip),
        key=lambda car: car.nom, reverse=True)

    paginator = Paginator(post, 5)  # Show 5 noms par page

    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1
    try:
        post = paginator.page(page)
    except(EmptyPage, InvalidPage):
        post = paginator.page(paginator.num_pages)

    return render(request, 'total.html', {'nomdomaine': nomdomaine, 'adresseip': adresseip , 'post': post})

Enfin dans mon template j'ai écris ceci:

{% if post %}

          <!--<h2 class="sub-header">Section title</h2>-->
          <div id="wrapper">
            <table cellpadding="0" cellspacing="0" border="0" class="sortable">
              <thead>
                        <tr>
                            <th>Nom</th>
                            <th>Détail</th>
                        </tr>
              </thead>
        {% for nom_domaine in post %}
                    <tbody>
                        <tr>
                            <td>{{ nom_domaine.nom }}</td>
                            <td><a href=detail/{{ nom_domaine.id }}">{{ ' detail' }}</a></td>
                        </tr>
                    </tbody>
         {% endfor %}
        {% for adresse_ip in post %}
                    <tbody>
                        <tr>
                            <td>{{ adresse_ip.nom }}</td>
                            <td><a href=detail/{{ adresse_ip.id }}">{{ ' detail' }}</a></td>                            
                        </tr>
                    </tbody>
        {% endfor %}
        </table>
          </div>
        ... systeme de pagination...
        {% endif %}

Le probleme est que le code ci-dessus me retourne non pas 5 noms par page mais 2 fois 5 noms (5 pour le nom de domaine et 5 pour adresse_ip) et ce sur 2 ou 3 pages.

Or je souhaite avoir sur une page 5 noms (peut importe lesquels) et sur la/les suivantes le reste par groupe de 5.

Merci de votre aide !!

Dernière modification par cobra85 (03-05-2017 18:25:42)

Hors ligne

  • Accueil
  • » Django-fr
  • » Afficher deux champs de models dans un meme tableau sur un template

Pied de page des forums