[PYTHON] Zeigen Sie Django ManyToManyField in der Vorlage

Einführung

In diesem Artikel werde ich schreiben, wie in Template angezeigt wird, was durch ManyToManyField verbunden ist.

Modellbestätigung

Lassen Sie uns zuerst das Modell überprüfen.

models.py


class Kadai(models.Model):
    class Meta:
        verbose_name = 'Aufgabe'
        verbose_name_plural = 'Aufgabe'

    kadai_name = models.CharField(
        verbose_name='Name der Ausgabe',
        max_length=100,
        unique=True,
    )

    category_number = models.IntegerField(
        verbose_name='Anzahl der Ausgabekategorien',
        default=0,
    )

    kadai_thumbnail = models.ImageField(
        verbose_name='Daumenbild',
        upload_to='media',
    )

    def __str__(self):
        return self.kadai_name


class KadaiCategory(models.Model):
    class Meta:
        verbose_name = 'Problemkategorie'
        verbose_name_plural = 'Problemkategorie'

    kadai_name = models.ManyToManyField(Kadai)

    category_name = models.CharField(
        verbose_name='Kategoriename',
        max_length=100,
        unique=True
    )

    kadai_number = models.IntegerField(
        verbose_name='Anzahl der Aufgaben',
        default=0
    )

    category_thumbnail = models.ImageField(
        verbose_name='Daumenbild',
        upload_to='media',
    )

    def __str__(self):
        return self.category_name

Überprüfen Sie die HTML-Datei

Dies ist das große Ganze, aber es ist lang, also werde ich es ein wenig verkürzen.

models.py


class Kadai(models.Model):
    class Meta:
        verbose_name = 'Aufgabe'
        verbose_name_plural = 'Aufgabe'

    kadai_name = models.CharField(
        verbose_name='Name der Ausgabe',
        max_length=100,
        unique=True,
    )

    .
    .
    .

    def __str__(self):
        return self.kadai_name


class KadaiCategory(models.Model):
    class Meta:
        verbose_name = 'Problemkategorie'
        verbose_name_plural = 'Problemkategorie'

    kadai_name = models.ManyToManyField(Kadai)

    category_name = models.CharField(
        verbose_name='Kategoriename',
        max_length=100,
        unique=True
    )

    .
    .
    .

    def __str__(self):
        return self.category_name

Dies macht es etwas einfacher zu sehen. Im Moment hat die "Kadai" -Klasse einige Herausforderungen, und die "Kadai-Kategorie" -Klasse hat mehrere Kategorien. Mit anderen Worten, weil es "viele zu viele" ist, verwende ich ManyToManyField. Schauen wir uns nun die Vorlage an. Diese HTML-Datei ist mit "Kadai Category" verbunden.

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="Es ist ein Miniaturbild.">
             <div class="card-body">
                  <h5 class="card-title">{{ category.category_name }}</h5>
                  <p class="card-text">Überprüfen Sie Ihre Fähigkeiten und verbessern Sie Ihre Fähigkeiten!</p>
                  <p>/{{ category.kadai_number }}</p>
                  <a href="#" class="btn btn-primary">Let's Challenge</a>
            </div>
       </div>
   </div>
{% endfor %}

In diesem Zustand wird nur das angezeigt, was in Model geschrieben ist, und es ist nicht möglich, das Modell der durch ManyToManyField verbundenen "Kadai" -Klasse anzuzeigen. Wie können Sie also die Modelle der "Kadai" -Klasse anzeigen, die durch ManyToManyFielf verbunden sind? Die Antwort lautet:

kadai_category.html


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

Werfen wir einen Blick auf das Gesamtbild.

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="Es ist ein Miniaturbild.">
             <div class="card-body">
                  <h5 class="card-title">{{ category.category_name }}</h5>
                  <p class="card-text">Überprüfen Sie Ihre Fähigkeiten und verbessern Sie Ihre Fähigkeiten!</p>
                  <p>/{{ category.kadai_number }}</p>
                 #Hier hinzufügen
                 {% 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 %}

Ich werde erklären, wie man es schreibt. Bitte haben Sie Verständnis, wenn Sie das gesamte Bild oben betrachten.

{%für Zählervariable (jeder Name ist akzeptabel) in Large für Anweisungszählervariablenteil.Variablennamen, die durch ManyToManyField verbunden sind.all %}
   <p>{{Zählervariable.Variablen des Modells, das Sie nach der Verbindung mit ManyToManyField laden möchten}}</p>
{% endfor %}

Schließlich

Ich weiß nicht, ob es gut kommuniziert wird, aber bitte vergleichen und reflektieren Sie es in Ihrem Projekt.

Recommended Posts

Zeigen Sie Django ManyToManyField in der Vorlage
Django # 2 (Vorlage)
Django HTML Vorlage Teil 2
Modell in Django
(Hinweis) Suchreihenfolge der Vorlagendateien in Django
Tipps für Django-Vorlagen
Form in Django
Geben Sie die Ansichts-URL in der Django-Vorlage an
Organisieren Sie Django-Vorlagendateien
Zeigen Sie die Pyramide in Python
Modelländerungen in Django
Brüche in Python anzeigen
Leistungsoptimierung in Django 3.xx.
PHP var_dump-like in Django-Vorlage
Behandeln Sie Konstanten in Django-Vorlagen
Legen Sie das Ausgabeformat vom Typ DateTime in der Django-Vorlage fest
Implementieren Sie die Follow-Funktion in Django
Ausgabe der Tabellenstruktur in Django
Muster der Vorlagenmethode in Java
(Hinweis) Django in Vagrant-Umgebung
Vorlagenregistrierung von Django Bootstrap
Erstellen Sie mit Django ein benutzerfreundliches Folgemodell mit ManyToManyField through
Laden Sie die Django-Shell mit ipython neu
[Python] Mit Tkinter mehrere Fenster anzeigen
Legen Sie Platzhalter in Eingabefeldern in Django fest
Fügen Sie in Django dynamisch Formularfelder hinzu
Achsen in Matplotlib als Prozentsätze anzeigen
Fehler im Zusammenhang mit Memcached in Django
Implementierung der Login-Funktion in Django
Registrieren Sie die Django-Anwendung im Projekt
Schreiben Sie externe Schlüsseleinschränkungen in Django
Machen Sie einen Filter mit einer Django-Vorlage
Stellen Sie Django in 3 Minuten mit Docker-Compose bereit
Pin factory_boy Startwert in Django
GraphQL-API mit graphene_django in Django
Implementierung der Like-Schaltfläche in Django + Ajax
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django
Erstellen Sie mit Django einen LINE-Bot