递归删除多级数据

删除需求:

  • 1、假设有多级分类
  • 2、当删除一级分类的时候,同时删除一级分类下面的所有分类
  • 在这里插入图片描述
    Controller代码
@DeleteMapping("{oneId}")
    public R deleteOneId(@PathVariable("oneId") String oneId){
        boolean flag = eduSubjectService.deleByOneId(oneId);
        if (flag){
            return R.ok();
        }
        return R.error();
    }

实现类

@Override
    public boolean deleByOneId(String oneId) {
        ArrayList<String> ids = new ArrayList<>();

        //先把要删除的一级分类id放入到集合中
        ids.add(oneId);

        //递归的将一级分类下的id也加入到集合中
        this.getIds(ids,oneId);
        //批量删除集合中的id
        int i = baseMapper.deleteBatchIds(ids);
        return i>0;
    }
    
//递归方法
private void getIds(ArrayList<String> ids, String oneId) {
        //查询二级分类的对象
        QueryWrapper<EduSubject> Wrapper = new QueryWrapper<>();
        Wrapper.eq("parent_id",oneId);
        List<EduSubject> twoSubjects = baseMapper.selectList(Wrapper);

        //遍历二级分类的对象,把二级分类的id加入到要删除的集合中
        for (EduSubject twoSubject : twoSubjects) {
            String id = twoSubject.getId();
            ids.add(id);
            //把二级分类的每一个ID,查询它下面的子节点
            this.getIds(ids,id);
        }
}

原文链接:https://blog.csdn.net/weixin_42985774/article/details/100562267

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Django 中的 ForeignKey 字段来实现多级部门的递归。在部门模型中添加一个指向自身的 ForeignKey 字段,表示该部门的上级部门。例如: ``` class Department(models.Model): name = models.CharField(max_length=50) parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE) ``` 其中,parent 字段指向自身,null=True 表示该字段可以为空,blank=True 表示该字段可以为空白,on_delete=models.CASCADE 表示删除上级部门时,下级部门也会被删除。 通过递归查询,可以获取某个部门的所有下级部门。例如,获取 id 为 1 的部门的所有下级部门: ``` def get_sub_departments(department): sub_departments = [] for sub_department in department.department_set.all(): sub_departments.append(sub_department) sub_departments.extend(get_sub_departments(sub_department)) return sub_departments department = Department.objects.get(id=1) sub_departments = get_sub_departments(department) ``` 这样就可以获取到 id 为 1 的部门的所有下级部门了。 ### 回答2: 用Django Model写一个多级部门的递归,可以使用ForeignKey字段来实现。 首先,创建一个Department模型类,包含部门名称和上级部门两个字段。上级部门使用ForeignKey字段来与同一个模型关联,实现多级部门的递归。 ```python from django.db import models class Department(models.Model): name = models.CharField(max_length=50) parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.SET_NULL) ``` 在模型类中,使用self来表示关联的是同一个模型。`null=True`表示上级部门可以为空,即最高级部门没有上级部门了。`blank=True`表示该字段在Admin后台可以为空。 接下来,可以通过在数据库中创建多级部门数据来测试递归关系。例如: ```python department1 = Department(name='总部') department1.save() department2 = Department(name='财务部', parent=department1) department2.save() department3 = Department(name='人力资源部', parent=department1) department3.save() department4 = Department(name='财务核算组', parent=department2) department4.save() # 以此类推... ``` 通过设置上级部门,可以实现多级部门的递归。例如,如果想查找某个部门的所有下级部门,可以使用以下方法: ```python def get_sub_departments(department): sub_departments = Department.objects.filter(parent=department) return sub_departments ``` 这样就可以根据传入的部门对象,获取到该部门的所有下级部门。 以上就是使用Django Model实现多级部门的递归的方法。 ### 回答3: 在Django中,我们可以使用`django.db.models.ForeignKey`来实现多级部门的递归关系。下面是一个简单的示例: ```python from django.db import models class Department(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.SET_NULL) def __str__(self): return self.name ``` 在上面的代码中,`Department`模型有两个字段:`name`和`parent`。`name`字段用于存储部门的名称,`parent`字段是一个外键字段,指向自身模型。通过将`parent`字段设置为`ForeignKey('self')`,我们实现了对自身的递归引用。 这样,我们就可以创建多级部门结构了。例如,我们可以创建一个总公司部门,并给它分配多个子部门。每个子部门又可以有自己的子部门,以此类推。 下面是一个示例: ```python # 创建总公司 headquarters = Department.objects.create(name='总公司') # 创建子部门 dept1 = Department.objects.create(name='部门1', parent=headquarters) dept2 = Department.objects.create(name='部门2', parent=headquarters) # 创建子部门的子部门 subdept11 = Department.objects.create(name='子部门1.1', parent=dept1) subdept12 = Department.objects.create(name='子部门1.2', parent=dept1) subdept21 = Department.objects.create(name='子部门2.1', parent=dept2) # 输出部门结构 print(headquarters) for subdept in dept1.department_set.all(): print(' -', subdept) for subsubdept in subdept.department_set.all(): print(' -', subsubdept) ``` 在上述示例中,我们首先创建了总公司部门,然后创建了两个子部门。接着,我们为子部门创建了更多的子部门。通过`department_set`属性,我们可以获取某个部门的所有直接子部门。 以上就是使用Django模型实现多级部门递归的基本方法。通过递归地引用自身模型,我们可以方便地构建和管理复杂的多级部门结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值