我正在使用Python和Django。如何创建一个以树状结构显示员工层级关系的网页?
例如:
Employee-1 (Manager -)
Employee-2 (Manager:Employee-1)
Employee-3 (Manager :Employee-2)
Employee-4 (Manager:Employee-3)
Employee-5 (Manager :Employee-1)
Employee-6 (Manager:Employee-5)
Employee-7 (Manager :Employee-6)
Employee-8 (Manager:Employee-5)
目前,我的代码看起来是这样的:
models.py:
class Employee(models.Model):
name = models.CharField(max_length=100)
position = models.CharField(max_length=100)
hire_date = models.DateField()
salary = models.DecimalField(max_digits=8, decimal_places=2)
manager = models.ForeignKey('self', on_delete=models.CASCADE, related_name='subordinates')
views.py和employee_hierarchy.html模板应该是什么样子的?在哪里实现逻辑最好:模型、视图还是模板?提前感谢!
我在views.py中尝试了以下代码:
def employee_hierarchy(request):
employees = Employee.objects.select_related('manager').all()
return render(request, 'employees/employee_hierarchy.html', {'employees': employees})
employee_hierarchy.html:
<body>
<h1>Employee Hierarchy</h1>
<ul>
{% for employee in employees %}
{% include 'employees/employee_item.html' with employee=employee %}
{% endfor %}
</ul>
</body>
employee_item.html:
<li>{{ employee.name }} ({{ employee.position }}) - Manager: {% if employee.manager %}{{ employee.manager.name }}{% endif %}</li>
{% if employee.subordinates.all %}
<ol>
{% for subordinate in employee.subordinates.all %}
{% include 'employees/employee_item.html' with employee=subordinate %}
{% endfor %}
</ol>
{% endif %}
我得到了以下的结果:
Employee-2 - Manager: Employee-1
Employee-3 - Manager: Employee-2
Employee-3 - Manager: Employee-2
Employee-4 - Manager: Employee-1
Employee-5 - Manager: Employee-4
Employee-6 - Manager: Employee-5
Employee-5 - Manager: Employee-4
Employee-6 - Manager: Employee-5
Employee-6 - Manager: Employee-5
我是一个编程初学者。请给我一些建议,告诉我如何最好地在类似树形结构中实现员工层级关系。