Ich habe eine Baumstruktur für Kategorien. Kategorien mit einem Fremdschlüssel, der sich auf sich selbst bezieht.Baumstruktur (Fremdschlüssel zu sich selbst) und Vorlagen
class Category(MetaData):
parent = models.ForeignKey('self', blank=True, null=True, verbose_name='parent category', on_delete=models.CASCADE)
name = models.CharField(max_length=255)
description = models.TextField()
Weil ich weiß nicht, die Tiefe des Baumes Kategorie (für nicht verwenden) Ich brauche eine rekursive Funktion zu verwenden:
def cat_for_parents(self, cat_obj):
...
if cat_obj.parent_id:
p = cat_obj.parent
...
self.cat_for_parents(p)
Aber wie ich die Funktion in der Vorlage implementieren zu bekommen so etwas wie diese (theoretisch unendlich rekursive Schleife):
<ul>
<li>CategoryA
<ul>
<li>SubCategA1
<ul>
<li> Subcateg Subcateg B1
<ul>
<li> Subcateg SubCateg C1>
<li> Subcateg SubCateg C2>
<ul>
<li> Subcateg Subcateg B2>
.............
Sie in mit aussehen sollte [django-MPTT] (https://github.com/django-mptt/django-mptt) für diese; Es enthält sowohl Datenbankstrukturen zum effizienten Speichern und Abrufen von Baumdaten als auch Schablonen-Tags zum rekursiven Rendern. –
@Daniel Roseman - danke ich werde ihren Code überprüfen; Ich bevorzuge es, meine eigenen Sachen zu machen, wo und wie ich gebraucht habe, einschließlich der Django-Version, anstatt in diesem Fall einen Drittanbieter zu verwenden – user3541631