假设你已经定义好了部门模型 Department
,该模型包含以下字段:
class Department(models.Model): name = models.CharField(max_length=100) parent_department = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
其中,name
表示部门名称,parent_department
表示部门的上级部门,是一个自关联的外键。
现在,我们可以使用递归函数来实现查找指定一级部门下的所有子部门:
def get_sub_departments(department_name): try: # 获取一级部门 department = Department.objects.get(name=department_name) except Department.DoesNotExist: return [] sub_departments = [] # 递归查找子部门 def _get_sub_departments(department): # 获取当前部门的子部门 departments = Department.objects.filter(parent_department=department) for sub_department in departments: sub_departments.append(sub_department) _get_sub_departments(sub_department) _get_sub_departments(department) return sub_departments
上面的代码首先通过指定的一级部门名称查找一级部门对象,然后定义了一个空列表 sub_departments
,用于存储所有子部门对象。接着,我们定义了一个递归函数 _get_sub_departments
,该函数用于递归查找当前部门的所有子部门。在函数中,我们首先通过当前部门查询所有子部门,并依次遍历每个子部门,将其添加到 sub_departments
列表中,并递归调用 _get_sub_departments
函数查找当前部门的子部门的子部门,直到所有子部门都被查找完毕。最后,我们返回 sub_departments
列表,其中包含了指定一级部门下的所有子部门对象。
你可以在 Django 项目中调用 get_sub_departments
函数,传入指定的一级部门名称,即可获取到该部门下的所有子部门对象列表。