Python Django如何从自参考模型建立ul-li层次结构
我有一个这样的模型Python Django如何从自参考模型建立ul-li层次结构,python,django,tree,hierarchy,Python,Django,Tree,Hierarchy,我有一个这样的模型 class Unit(models.ModelForm): Name = models.CharField(max_length = 100) Parent = models.ForeignKey('self' , on_delete=models.CASCADE , related_name = 'SubUnits') 我想在模板中显示带有ul和li的层次结构树。 首先,在views.py中,我传递了所有没有父对象的单元,这些单元被视为根对象,然后通过一
class Unit(models.ModelForm):
Name = models.CharField(max_length = 100)
Parent = models.ForeignKey('self' , on_delete=models.CASCADE , related_name = 'SubUnits')
我想在模板中显示带有ul和li
的层次结构树。
首先,在views.py
中,我传递了所有没有父对象的单元,这些单元被视为根对象,然后通过一个自定义过滤器标记
我要生成层次结构树
object1 ----|object 1.1
|object 1.2------| object 1.2.1
|object 1.3
objecte 2
object 3 ---| object 3.1
| object 3.2---| object 3.2.1
在我的自定义标记中,我寻找一个可以为我的根对象生成无限父级和子级ulli的函数。最后我找到了我的算法 models.py
class Hierarchy(models.Model):
Name = models.CharField(max_length=255)
Parent = models.ForeignKey('self' , on_delete=models.CASCADE , related_name='SubHierarchy' , null=True , blank=True)
def __str__(self):
return self.Name
my views.py:
#i pass root objects
hierarchy = Hierarchy.objects.filter(Parent = None)
return render(request , 'index.html' , {
'hierarchy' : hierarchy
})
模板:
{% for unit in hierarchy %}
{{unit|hierarchy|safe}}
{% endfor %}
和我的过滤器:
def assitant(obj):
string = ''
childs = obj.SubHierarchy.all()
if childs.count() == 0:
string = '<li>{}</li>'.format(obj)
else:
string += hierarchy(obj)
return string
@register.filter
def hierarchy(unit):
childs = unit.SubHierarchy.all()
if childs.count() == 0:
string = '<li>{}</li>'.format(unit)
else:
string = '<li>{}<ul>'.format(unit)
for child in childs:
string += assitant(child)
string += '</ul></li>'
return string
def助手(obj):
字符串=“”
childs=obj.SubHierarchy.all()
如果childs.count()==0:
字符串='{} '.格式(obj)
其他:
字符串+=层次结构(obj)
返回字符串
@寄存器过滤器
def层次结构(单位):
childs=unit.SubHierarchy.all()
如果childs.count()==0:
字符串=“{} ”。格式(单位)
其他:
字符串=“{}”。格式(单位)
对于儿童中的儿童:
字符串+=助手(子项)
字符串+='
'
返回字符串
看看这个答案是否有用-