[PYTHON] Afficher Django ManyToManyField dans un modèle

introduction

Dans cet article, j'écrirai comment afficher ce qui est connecté par ManyToManyField dans Template.

Confirmation du modèle

Vérifions d'abord le modèle.

models.py


class Kadai(models.Model):
    class Meta:
        verbose_name = 'Tâche'
        verbose_name_plural = 'Tâche'

    kadai_name = models.CharField(
        verbose_name='Nom du problème',
        max_length=100,
        unique=True,
    )

    category_number = models.IntegerField(
        verbose_name='Nombre de catégories de problèmes',
        default=0,
    )

    kadai_thumbnail = models.ImageField(
        verbose_name='Image du pouce',
        upload_to='media',
    )

    def __str__(self):
        return self.kadai_name


class KadaiCategory(models.Model):
    class Meta:
        verbose_name = 'Catégorie de problème'
        verbose_name_plural = 'Catégorie de problème'

    kadai_name = models.ManyToManyField(Kadai)

    category_name = models.CharField(
        verbose_name='Nom de catégorie',
        max_length=100,
        unique=True
    )

    kadai_number = models.IntegerField(
        verbose_name='Nombre de tâches',
        default=0
    )

    category_thumbnail = models.ImageField(
        verbose_name='Image du pouce',
        upload_to='media',
    )

    def __str__(self):
        return self.category_name

Vérifier le fichier HTML

C'est une vue d'ensemble, mais c'est long, je vais donc l'abréger un peu.

models.py


class Kadai(models.Model):
    class Meta:
        verbose_name = 'Tâche'
        verbose_name_plural = 'Tâche'

    kadai_name = models.CharField(
        verbose_name='Nom du problème',
        max_length=100,
        unique=True,
    )

    .
    .
    .

    def __str__(self):
        return self.kadai_name


class KadaiCategory(models.Model):
    class Meta:
        verbose_name = 'Catégorie de problème'
        verbose_name_plural = 'Catégorie de problème'

    kadai_name = models.ManyToManyField(Kadai)

    category_name = models.CharField(
        verbose_name='Nom de catégorie',
        max_length=100,
        unique=True
    )

    .
    .
    .

    def __str__(self):
        return self.category_name

Cela rend un peu plus facile à voir. Pour le moment, la classe "Kadai" présente quelques défis, et la classe "Kadai Category" comporte plusieurs catégories. En d'autres termes, parce que c'est "plusieurs-à-plusieurs", j'utilise ManyToManyField. Regardons maintenant le modèle. Ce fichier HTML est connecté à "Kadai Category".

kadai_category.html


{% for category in object_list %}
   <div class="col-4 one-card">
        <div class="card" style="width: 18rem;">
             <img src="{{ category.category_thumbnail.url }}" height="300" alt="C'est une image miniature.">
             <div class="card-body">
                  <h5 class="card-title">{{ category.category_name }}</h5>
                  <p class="card-text">Vérifiez vos compétences et améliorez vos compétences!</p>
                  <p>/{{ category.kadai_number }}</p>
                  <a href="#" class="btn btn-primary">Let's Challenge</a>
            </div>
       </div>
   </div>
{% endfor %}

Dans cet état, il n'affiche que ce qui est écrit dans Model, et il n'est pas possible d'afficher le modèle de la classe "Kadai" connectée par ManyToManyField. Alors, comment pouvez-vous afficher les modèles de classe "Kadai" qui sont connectés par ManyToManyFielf? La réponse est la suivante.

kadai_category.html


{% for kadai in category.kadai_name.all %}
   <p>{{ kadai.kadai_name }}</p>
{% endfor %}

Jetons un coup d'œil à la situation dans son ensemble.

kadai_category.html


{% for category in object_list %}
   <div class="col-4 one-card">
        <div class="card" style="width: 18rem;">
             <img src="{{ category.category_thumbnail.url }}" height="300" alt="C'est une image miniature.">
             <div class="card-body">
                  <h5 class="card-title">{{ category.category_name }}</h5>
                  <p class="card-text">Vérifiez vos compétences et améliorez vos compétences!</p>
                  <p>/{{ category.kadai_number }}</p>
                 #Ajouter ici
                 {% for kadai in category.kadai_name.all %}
                    <p>{{ kadai.kadai_name }}</p>
                 {% endfor %}
                  <a href="#" class="btn btn-primary">Let's Challenge</a>
            </div>
       </div>
   </div>
{% endfor %}

Je vais vous expliquer comment l'écrire. Veuillez comprendre en regardant l'image entière ci-dessus.

{%pour la variable de compteur (tout nom est acceptable) dans Large pour la partie variable de compteur d'instruction.Noms de variables connectés par ManyToManyField.all %}
   <p>{{Variable de compteur.Variables du modèle que vous souhaitez charger après la connexion à ManyToManyField}}</p>
{% endfor %}

finalement

Je ne sais pas si c'est bien communiqué, mais veuillez le comparer et le refléter dans votre projet.

Recommended Posts

Afficher Django ManyToManyField dans un modèle
Django # 2 (modèle)
Modèle HTML Django partie 2
Modèle dans Django
(Remarque) Ordre de recherche des fichiers modèles dans Django
Astuces pour les modèles Django
Formulaire à Django
Spécifiez l'URL de la vue dans le modèle Django
Organiser les fichiers de modèle Django
Afficher la pyramide en Python
Modifications du modèle dans Django
Afficher les fractions en Python
Optimisation des performances dans Django 3.xx
PHP comme var_dump dans le template Django
Gérer les constantes dans les modèles Django
Définir le format de sortie du type DateTime dans le modèle Django
Implémenter la fonction de suivi dans Django
Sortie de la structure de table dans Django
Modèle de méthode de modèle en Java
(Note) Django dans l'environnement Vagrant
Enregistrement du modèle depuis Django Bootstrap
Créez un modèle de suivi facile à utiliser avec Django en utilisant ManyToManyField via
recharger dans le shell django avec ipython
[Python] Afficher plusieurs fenêtres avec Tkinter
Définir des espaces réservés dans les champs de saisie dans Django
Ajouter dynamiquement des champs de formulaire dans Django
Afficher les axes sous forme de pourcentages dans Matplotlib
Erreur liée à memcached dans django
Implémentation de la fonction de connexion dans Django
Enregistrer l'application Django dans le projet
Ecrire des contraintes de clé externe dans Django
Créer un filtre avec un modèle django
Déployez Django en 3 minutes à l'aide de docker-compose
Épingler la valeur de départ factory_boy dans Django
API GraphQL utilisant graphene_django dans Django
Implémentation du bouton like dans Django + Ajax
Récupérer la chaîne de requête (chaîne de requête) avec Django
Créer un bot LINE avec Django