[Django] ManyToManyField im Template ausgeben

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,
ich habe ein Model "Notizen" mit verschiedenen Datentypen. Dabei ist auch ein Feld "kategorie", was als ManyToManyField definiert ist.

Code: Alles auswählen

kategorie = models.ManyToManyField(Kategorie)
Im Template möchte ich das Feld "kategorie" mit anzeigen.

Code: Alles auswählen

{% for notiz in notizen %}
{{ notiz.kategorie}}
{% endfor %}
Angezeigt wird aber nur das Objekt:

Code: Alles auswählen

<django.db.models.fields.related.ManyRelatedManager object at 0x7fcfe76c6610>
Ist es möglich, im Template ein ManyToManyField auszugeben?

Grüße
Mawilo
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Mittlerweile habe ich eine Lösung gefunden - man muss eben nur genug probieren.

Code: Alles auswählen

{% for notiz in notizen %}
{{ notiz.kategorie.all | first}}
{% endfor %}
Damit wird bei mir der gewünschte Wert ausgegeben.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Eigentlich muss man nicht probieren, sondern wissen :) Es sollte doch klar sein, dass wenn ein Notiz-Objekt eine M2M-Relation namens kategorie (wieso eigentlich Einzahl, ein M2M-Feld kann doch beliebig viele assoziierte Objekte haben?) hat, dann steckt da ein Manager drin und du musst "all" oder eine QuerySet-Methode benutzen, um an die Modelle zu kommen.

Statt im Template das all und dann auch noch first zu benutzen, würde ich empfehlen, lieber eine passende Methode in deinem Notiz-Objekt zu defineren:

Code: Alles auswählen

def first_category(self):
    return self.kategorie.all()[0]
Stefan
Antworten