如何在django中制作层次结构?我想创建一个人树。我知道我应该在Person模型中添加父字段。我需要在模型和视图中更改什么?另外,我想使用树视图来表示层次结构。
class Person(models.Model):
name = models.CharField(max_length=40)
def __str__(self):
return self.name
def add_person(request):
if(request.method == 'POST'):
name = request.POST['name']
person = Person(name=name)
person.save()
return redirect('/persons')
else:
return render(request, 'add_person.html')
答案 0 :(得分:0)
如果您向父人添加外键,则可以轻松创建一个heirachy
class Person(models.Model):
name = models.CharField(max_length=40)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
def __str__(self):
return self.name
def add_person(request):
if(request.method == 'POST'):
name = request.POST['name']
parent_id = request.POST.get('parent_id')
person = Person(name=name, parent_id=parent_id)
person.save()
return redirect('/persons')
else:
return render(request, 'add_person.html')
要获得一个人的所有孩子,你可以简单地做
person = Person.objects.get(id=p_id)
person.children.all()
我不确定是否有内置的TreeView,但你总是可以构建它
# view
def tree_view(request):
people = Person.objects.prefetch('children')
return render(request, 'template.html', {'people': people})
# template
<ul>
{% for person in people %}
<li>
{{ person.name }}
<ul>
{% for child in person.children.all %}
<li>{{ child.name }}</li>
{% endfor %}
</ul>
</li>
{% endif %}
</ul>
当然你可以创建多个模板并使用includes来递归它们,这样你就可以有n代