什么情况下需要自定义模型管理器
(1)修改管理器返回的原始数据集
(2)管理器类中添加额外的方法,帮我们操作模型类对应的数据表
首先修改了
class Department(models.Model):
"""部门类"""
name = models.CharField(max_length=20)
create_date = models.DateField(auto_now_add=True)
# 使用自定义的模型管理器(默认的objects就不会在使用)
objects = DepartmentManager()
def __str__(self):
return self.name
# 自定义的模型管理器
class DepartmentManager(Manager):
# 修改管理器返回的原始查询集合
def all(self):
# 重写all方法 只返回2009年之后成立的部门
return super().all().filter(create_date__gte=date(2009,1,1))
# 在模型类中封装增删改查的方法
def create_dep(self,name,create_date):
'''新增一个部门'''
dep = Department()
dep.name = name
dep.create_date = create_date
dep.save()
return dep # 返回新增之后的员工对象
这时候报错,
这里注意模型管理器类应该定义在模型类之前。调整顺序后,重新执行。
在视图函数中,就可以直接使用自定义的模型管理器中的方法
# def add_dep(request):
# dep = Department()
# dep.name = '财务部'
# dep.create_date = date(2017,1,1)
# dep.save()
# return redirect('/app01/show_deps')
# 在模型管理器中,使用自定义的模型管理器中的方法来实现新增部门
def add_dep(request):
'''新增部门'''
Department.objects.create_dep('财务部',date(2018,1,1))
return redirect('/app01/show_deps')