Models and Databases 5.Managers

默认的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()

自定义manager和model继承

你可能感兴趣的:(Models and Databases 5.Managers)