11- 模型 - Manager管理器

作用: 可以扩展Manager管理器的原生功能
缺点: 麻烦,  如果在Manager中自定义方法,还不如在类中写类方法实在

模型成员:

        模型类中有一个Manager类的对象,通过管理器对象可以实现和数据库的访问。
        没有为模型类定义管理器时,Django会为模型类生成一个名为objects的管理器
        自定义管理器后,Django不再生成默认管理器objects。
        管理器是Django的模型进行数据库操作的接口,Django应用的每个模型都拥有至少一个管理器。
        Django支持自定义管理器类,继承自models.Manager。
 

自定义管理器类主要用于两种情况:
            (1). 修改原始查询集
            (2). 向管理器类中添加额外的方法,如向数据库中插入数据。

一. 重命名管理器

        (1). 在模型类中定义一个新的管理器
# 替换objects
# 在模型类中自定义一个新的管理器,则原有的objects管理器就不会存在
class User(models.Model):
   ...
   
   # 可以自定义,但意义不大
   user_manager = Manager() # 自定义调用系统管理器
        (2). 视图函数中使用新的管理器操作数据库
# 使用自定义管理器查询
data=User.user_manager.all()
        (3). 代码示例

二. 自定义管理器

        (1). models.py 扩展Manager管理器功能
# 扩展Manager管理器功能
class MyManager(Manager):

    # 重写父类get_queryset方法
    def get_queryset(self):
        # 父类获取结果集方法.过滤()
        return super().get_queryset().filter(sex__isnull=False) # 把User中的sex不为空的显示,调用的类中必须有sex字段
    
    # 自定义方法
    def after(self, data): 
        # 返回已经通过扩展功能过滤一遍的结果集 .filter(时间 > data) 
        return User.objects.filter(regtime__gt=data)
        (2). 模型类中 自定义管理器 
class User(models.Model):
    ...

    objects = MyManager()  # 系统管理器,此时调用的也是自定义的管理器
    sex_manager = MyManager()  # 使用自定义管理器
        (3). 视图函数调用 管理器
    # 使用自定义管理器查询
    data = User.sex_manager.all()
    print(data)  # 查询sex不为空的结果集

    # 调用管理器的自定义方法
    # sex_manager: 已经过滤一次的结果集 .after方法
    data1 = User.sex_manager.after("2023-09-07 11:49:53.000000")
    print(data1)
        (4). 代码示例

三.  类方法扩展查询

        (1). 模型类中定义类方法
class User(models.Model):
    ...

    @classmethod
    def after(cls, data):
        # 大于 data 的时间
        return cls.objects.filter(regtime__gt=data)

    @classmethod
    def get_sexes(cls):
        # 不为空的数据
        return cls.objects.filter(sex__isnull=False)
        (2). 视图函数调用
    # 调自己的类方法
    data = User.after("2023-09-07 11:49:53.000000")
    print(data)

    data1 = User.get_sexes()
    print(data1)
        (3). 代码示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
manager->getdisplaytreemodel() 是一种代码示例,可能是根据业务需求获取显示树模型的方法。 在软件开发中,经常会用到树模型来组织和展示数据。树模型可以将数据按层级结构分类和组织,方便用户查看和操作。getdisplaytreemodel() 方法则是用来获取经过处理的、用于显示的树模型。 该方法可能从某个数据源获取原始数据,并进行适当处理和转换,然后返回一个适合显示的树模型。这个树模型可以包含多个层级,每个节点代表一个数据项,通过父子关系来组织数据。 在调用 manager->getdisplaytreemodel() 方法时,可能需要提供一些参数,用于指定数据源、过滤条件或排序方式等。根据这些参数,方法会执行相应的数据查询和处理操作,最后返回一个符合需求的树模型。 例如,一个商城网站的后台管理系统可能需要显示商品分类的树结构。调用 manager->getdisplaytreemodel() 方法时,可能传入商品分类的父子关系信息、显示名称、排序方式等参数。方法会根据这些参数,从数据库中查询商品分类数据,并将其转换成树模型返回,用于在后台管理界面显示商品分类树。 综上,manager->getdisplaytreemodel() 方法是一种获取经过处理的、用于显示的树模型的方式。根据业务需求,该方法可能接受一些参数,从某个数据源获取原始数据,并进行合适的处理和转换,最后返回一个适合显示的树模型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值