IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Comment afficher un champ de type ManyToManyField dans une page


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2021
    Messages : 11
    Par défaut Comment afficher un champ de type ManyToManyField dans une page
    Bonjour
    Et déjà merci, oui merci d'être là ;-)
    Bon j'avance énormément sur mon projet, mais il me reste un petit problème, en effet je n'arrive pas a visualiser des information d'un champ de type ManytoMany.

    pour faire simple j'arrive a récupérer mon enregistrement et l'ensemble des champs et image sans problème mais le champs ManytoMany impossible.
    j'ai donc essaye de récupérer en amont dans la View.py et de le passer dans le contexte, marche pas non plus.

    Après je doute que Django ne possède pas un méthode simple ...
    par avance merci pour votre aide
    Amicalement
    Fred

    models.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    import os
    from django.db import models
    from unipath import path
     
    # Create your models here.
     
    class Country(models.Model):
        Country_Phone = models.IntegerField(blank=True, null=True)
        Country_Code = models.CharField(max_length=2, blank=True)
        Country_Name = models.CharField(max_length=80, default=" ")
        Country_Symbol = models.CharField(max_length=10, blank=True, null=True)
        Country_Capital = models.CharField(max_length=80, blank=True, null=True)
        Country_Currency = models.CharField(max_length=3, blank=True, null=True)
        Country_Continent = models.CharField(max_length=30, blank=True, null=True)
        Country_ContinentCode = models.CharField(max_length=2, blank=True, null=True)
        Country_Alpha3 = models.CharField(max_length=3, blank=True, default="")
        Country_Flag = models.FileField(upload_to="flag", blank=True, null=True)
     
        class Meta:
            verbose_name = "Country"
            verbose_name_plural = "Countries"
     
        def __unicode__(self):
            return u'%s' % self.Country_Name
     
        def __str__(self):
            return '%s - %s' % (self.Country_Alpha3, self.Country_Name)
     
    class Tests(models.Model):
        Test_Ref = models.IntegerField(blank=True, null=True)
        Test_Name = models.CharField(max_length=100, blank=True)
        Test_Countries = models.ManyToManyField(Country, blank=True)
     
        def __str__(self):
            return '%s - %s' % (self.Test_Ref, self.Test_Name)
    view.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    from django.shortcuts import render, redirect
    from .models import Tests, Country
     
     
    def index(request):
        tests = Tests.objects.order_by('-id').all()
        tests_number = tests.count()
     
        countries = Country.objects.all()
        countries_all = Country.objects.values_list('Country_Name').order_by('Country_Name')
        countries_all_number = countries_all.count()
        countries_list = Tests.objects.values_list('Test_Countries').order_by('Test_Countries').distinct()
        countries_number = countries_list.count()
     
        print(f"countries = {countries}")
        print(f"countries_all = {countries_all}")
        print(f"countries_all_number = {countries_all_number}")
        print(f"countries_list = {countries_list}")
        print(f"countries_number = {countries_number}")
     
     
        message = f'{tests_number} tests :'
        if tests_number == 1:
            message = f'{tests_number} test :'
     
        context = {
            'tests': tests,
            'message': message,
            'countries': countries,
        }
     
        return render(request, 'Myapp/index.html', context)
    show.html
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <h1>TEST</h1>
     
    <h2>{{message}}</h2>
    {% for t in tests %}
        <h3>{{ t.Test_Ref }} - {{ t.Test_Name }} - {{ t.Test_Countries.Country_Name }}</h3>
    {% endfor %}
     
     
    {% for rel in tests.from_test_countries.all %}
      <p> rel[{{ forloop.counter }}]={{ rel.Test_Ref }}
            {{ rel.from_person.name }} ({{ rel.from_person.eyes }})
            {{ rel.to_person.name   }} ({{ rel.to_person.eyes   }})</p>
    {% endfor %}

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2021
    Messages : 11
    Par défaut Avec project exemple
    Bonjour je tourne en rond alors voila un projet exemple
    j'espère que vous pouvez m'aider
    merci
    Fred

    Nom : 2022-01-01 23_00_54-Paramètres.jpg
Affichages : 334
Taille : 8,5 Ko

    index.html

    models.py

    views.py

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 063
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for country in t.Test_Countries.all %}
    donnerait la liste des country à mon sens et la bonne suite à


  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2021
    Messages : 11
    Par défaut retour
    Je viens de comprendre thanks Fred

    question, sais tu me dire pourquoi
    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    views = PhotosElements.objects.filter(samples__id=id). \
                                    filter(PhotosElements_Main=True). \
                                    values_list('id', flat=True)
    et
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h1>view : {{ view.id }}</h1>
    <h1>PhotosElements_Ref : {{ view.PhotosElements_Ref }}</h1>

    cela ne marche pas
    par contre si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    views = PhotosElements.objects.filter(samples__id=id). \
                                    filter(PhotosElements_Main=True). \
                                    values_list('id', flat=True). \
                                    values()
    là cela marche, une idée ?

    cela marche oui et non, en fait j'ai une url, impossible de la récupérer

    merci si tu as une idée
    ++
    Fred

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 063
    Par défaut
    Bonjour,

    Peut-être que l'endroit où tu places ta variable views nécessite un dictionnaire. voir dans la documentation la différence entre values et values_list.

    Avec des print bien placés, tu peux aussi te rendre compte des résultats attendus et modifier en conséquence.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Comment afficher le text de type int dans le canvas
    Par mohan dans le forum Tkinter
    Réponses: 4
    Dernier message: 26/07/2016, 23h15
  2. Valeur d'un champ de type File dans une page HTML
    Par AlainTech dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/12/2007, 13h17
  3. Réponses: 5
    Dernier message: 10/05/2006, 15h47
  4. Réponses: 2
    Dernier message: 03/11/2005, 20h26
  5. Champs de type XML dans une base de données
    Par Flocodoupoil dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/07/2004, 18h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo