Seite 1 von 1

[Django] ManyToManyField im Template ausgeben

Verfasst: Montag 15. Februar 2010, 19:58
von Mawilo
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

Verfasst: Montag 15. Februar 2010, 21:20
von Mawilo
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.

Verfasst: Mittwoch 17. Februar 2010, 11:41
von sma
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