默认的Manager名称为objects
如果在model中定义了类型为models.Manager的属性 则会替换
自定义manager
可以通过派生Manager来生成自定义Manager,添加额外的方法,添加或修改原始的manager的返回值
添加额外的方法
数据表级别的方法 如果想定义行级别的方法应该定义在model中
额外的方法可以返回任意值
改变初始的queryset
可以重载get_queryset方法来控制
可以在model中设置很多manager
Default Manager
Model._default_manager
django认为在model中的第一个Manger是default manager
也可在Meta中设置default_manager_name
使用的时候做为_default_manager,这个对于三方扩展有用,避免objects被替换出错,不能假定使用的Model中有objects
Base Manager
Model._base_manager
_base_manager,是在获取关联对象时使用,可通过Meta中设置base_manager_name(原因是Django需要获取到关联对象即使它被过滤掉而在default manager中不能获取)
自定义queryset
在自定义queryset中定义的方法,需要再model定义一个对应的使用的方法,通过get_queryset获得queryset,再在其上调用该方法
通过queryset创建manager
除了像上述的创建重复方法,可以通过
people = PersonQuerySet.as_manager()
会复制:公开方法、设置了queryset_only属性为False的方法
Manager.from_queryset()
网友评论