Files
djangoadmin-wiki/DjangoAdmin_Django_AntdVue/zh/volume4/business/dept.md
T
2026-09-12 23:12:15 +08:00

4.7 KiB

:::tip 部门/职级/岗位 部门、职级、岗位是组织架构管理的三个核心模块。部门采用树形结构,职级和岗位为简单 CRUD 模块。用户表通过 dept_id、position_id、level_id 三个外键关联这三个模块。 :::

部门管理

部门模型

# application/dept/models.py
from application.models import BaseModel

class Dept(BaseModel):
    """部门模型类"""
    class Meta:
        db_table = 'django_dept'

    name = models.CharField(max_length=150, verbose_name='部门名称')
    type = models.IntegerField(default=0, verbose_name='部门类型:1-公司 2-子公司 3-部门 4-小组')
    parent_id = models.IntegerField(default=0, verbose_name='上级部门ID')
    sort = models.IntegerField(default=0, verbose_name='部门排序')
    note = models.CharField(max_length=255, null=True, blank=True, verbose_name='备注')

树形结构

部门通过 parent_id 字段形成树形结构:

公司总部 (parent_id=0)
+-- 技术部 (parent_id=1)
| +-- 前端组 (parent_id=2)
| +-- 后端组 (parent_id=2)
+-- 市场部 (parent_id=1)

删除前校验

部门删除时需检查是否存在下级部门或用户引用:

# application/dept/services.py
def delete_dept(request):
    data = parse_request_body(request)
    dept_id = data.get('id')

    # 检查是否存在下级部门
    if Dept.objects.filter(parent_id=dept_id, is_delete=False).exists():
        return R.failed("存在下级部门,请先删除下级部门")

    # 检查是否存在用户引用
    if User.objects.filter(dept_id=dept_id, is_delete=False).exists():
        return R.failed("存在用户引用该部门,请先调整用户部门")

    # 执行删除...
    return R.ok(msg="删除成功")

职级管理

职级模型

# application/level/models.py
from application.models import BaseModel

class Level(BaseModel):
    """职级模型类"""
    class Meta:
        db_table = 'django_level'

    name = models.CharField(max_length=255, verbose_name='职级名称')
    status = models.IntegerField(default=0, verbose_name='职级状态:1-在用 2-停用')
    sort = models.IntegerField(default=0, verbose_name='职级排序')

表单验证

# application/level/forms.py
from django import forms
from application.level.models import Level

class LevelForm(forms.ModelForm):
    class Meta:
        model = Level
        fields = ['name', 'status', 'sort']
        error_messages = {
            'name': {
                'required': '职级名称不能为空',
                'max_length': '职级名称不能超过255个字符',
            },
        }

岗位管理

岗位模型

# application/position/models.py
from application.models import BaseModel

class Position(BaseModel):
    """岗位模型类"""
    class Meta:
        db_table = 'django_position'

    name = models.CharField(max_length=255, verbose_name='岗位名称')
    status = models.IntegerField(default=0, verbose_name='岗位状态:1-在用 2-停用')
    sort = models.IntegerField(default=0, verbose_name='岗位排序')

API 接口

部门接口

接口 方法 权限节点 说明
/dept/list GET sys:dept:list 部门列表
/dept/add POST sys:dept:add 新增部门
/dept/update POST sys:dept:update 编辑部门
/dept/delete/<int:dept_id> POST sys:dept:delete 删除部门

职级接口

接口 方法 权限节点 说明
/level/page GET sys:level:page 职级分页列表
/level/add POST sys:level:add 新增职级
/level/update POST sys:level:update 编辑职级
/level/delete/<int:level_id> POST sys:level:delete 删除职级
/level/status POST sys:level:status 设置状态

岗位接口

接口 方法 权限节点 说明
/position/page GET sys:position:page 岗位分页列表
/position/add POST sys:position:add 新增岗位
/position/update POST sys:position:update 编辑岗位
/position/delete/<int:position_id> POST sys:position:delete 删除岗位
/position/status POST sys:position:status 设置状态

总结

组织架构模块具备以下特点:

1. 部门树形:parent_id 形成多级部门结构,删除前校验下级部门和用户引用
2. 职级/岗位:简单 CRUD 模块
3. 表单验证:Django Form + error_messages 中文提示
4. 用户关联:用户表通过 dept_id、position_id、level_id 关联
5. 删除保护:删除前校验引用关系,防止数据悬空