多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 模型管理器自定义 一、可以自定义模型管理器,比如以下两种场景: 1. 需要重写模型管理器中现有的方法 > 需求: 调用`Department.objects.all()`时,返回的是`is_delete`等于False的部门 2. 封装增删改查的方法 > 需求: 在管理器类中,封装一个创建部门的方法,方便直接调用 **注意:自定义后模型管理器后, Django 将不再自动生成默认的 objects** 二、 实现参考 1. 自定义模型管理器 ~~~ # 在users/models.py文件添加以下代码 class DepartmentManager(Manager): def all(self): """重写all方法:只返回没有删除的部门""" return super().all().filter(is_delete=False) def create_dep(self, name, create_date): """封装新增部门的方法,方便调用""" dep = Department() dep.name = name dep.create_date = create_date dep.save() return dep ~~~ 2. 在模型类中使用自定义的模型管理器 ~~~ # app01/models.py class Department(models.Model): """部门类""" ... # 自定义模型管理器 objects = DepartmentManager() ~~~ 3. 自定义模型管理器的调用 ~~~ # 使用管理器封装的方法,调用更方便 Department.objects.create_dep('财务部', '2018-1-1') # 调用重写过的all方法,返回的直接是is_delete=False的部门 # 不再需要如此查询: # deps = Department.objects.all().filter(is_delete=False) deps = Department.objects.all() ~~~