2016-04-09 4 views
0

Ich versuche, manytomany Feld zu verwenden, aber ich bin so verwirrt. was ich versuche zu erreichen ist; Innerhalb der Lebensmittelkategorie möchte ich Links für Pommes, Steak, Kartoffel Kategorieseiten anzeigen. Ich versuche es so zu machen;Wie man vieleTomany Felder mit sich selbst benutzen?

class Category(models.Model): 
    name = models.CharField(max_length=128, unique=True) 
    related_cat = models.ManyToManyField('self') 



{% if category.related_cat %} 

{{category.related_cat.name}} 

{% endif %} 

Aber dies zeigt keine ... Ich bin so verwirrt mit diesem ... kann jemand bitte klären und leiten Sie mir, was ich tun sollte?

+0

Warum ManyToMany? Wenn jede Unterkategorie nur einen Elternteil haben kann, sollten Sie stattdessen einen ForeignKey verwenden. – Selcuk

+0

@Selcuk Sache, die ich versuche zu tun ist, Kinderkategorien in der Elternkategorie anzeigen .... ja ich denke, ich sollte Fremdschlüssel hier verwenden .... hmmm Ich werde es versuchen –

+0

Beachten Sie, dass in diesem Fall 'related_cat' wil geben Sie die übergeordnete Kategorie, während 'category_set.all' alle Unterkategorien zurückgibt. Es könnte einfacher für Sie sein, Ihren Code in der Zukunft zu lesen, wenn Sie 'related_cat' in etwas wie' parent_category' umbenennen, wenn Sie mit der ForeignKey-Methode arbeiten. – Selcuk

Antwort

3

Da Ihr Feld related_cat, ist ein ManyToManyField, es ist mehr als Referenz 1 Objekt enthalten.

Zum Zugriff auf die Objekte in einem ManyToManyField Versuch:

{% if category.related_cat %} 

    {% for related_category in category.related_cat.all %} 
     {{related_category.name}} 
    {% endfor %} 

{% endif %} 

Weitere Beispiele:

https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/#many-to-many-relationships

+0

danke es funktioniert super! –

+0

Ich habe gerade einen Test gemacht und ich bekam ein Problem , als ich eine Sportkategorie machte und dann Baseball, Fußball, Basketball als related_cat wählte, dann werden in der folgenden Sportkategorie die folgenden gezeigt aber sogar in Baseball, Fußball, Basketballseite die related_cat werden angezeigt Ich möchte Fußball ---> Sport aber nicht Sport ----> Fußball –

+0

können Sie das Problem erkennen? –