Django中Manager管理器的使用

2 篇文章 0 订阅

Django强大的ORM帮助我们实现了通过类和对象去操作数据库,从而大大简化了我们在后台操作数据库的难度,那么Django是如何实现和数据库之间的映射的呢?
django中ORM有三个类:Manager、Queryset、Model,其中Manager类实现了和数据库之间的操作,Manager类中从QuerySet类中拷贝了许多表级方法,通过这些方法实现数据库的查询,并且将查询到的结果封装成一个Queryset对象返回,然后通过Queryset对象中的表级方法可以获取到我们需要的数据,如果我们不满足于现有的表级方法,可以通过重写Manager实现,一般不会去重写Queryset。而Model类则实现了数据表的创建。
想要自定义Manager的方式实现我们需要的表级方法也很简单,只需要继承Manager类,复写或者新增方法即可。
django中我们都是使用的Manager管理器名称都是objects,如果想要更改某张表的管理器名称也非常简单,只需要在创建表的时候重新定义一个管理器:
在这里插入图片描述
命令行输入python manage.py shell,进行查询:
在这里插入图片描述
可以看到此时使用objects已经查询不到了,因为我们已经更改了管理器的名称,需要使用stores:
在这里插入图片描述
我们已经知道manager管理器在查询完数据库会返回给我们一个可遍历的Queryset对象,ORM允许我们通过重写get_queryset方法去返回我们想要返回的Queryset对象,例如我们在查询商品时只想要返回已上架的商品,正常查询时使用all()方法会将所有商品查询出来:
在这里插入图片描述
这个时候我们需要复写Manager的get_queryset方法:

form django.db import models
class StoreManager(models.Manager):
    def get_queryset(self):
        return super(StoreManager,self).get_queryset().filter(goods_status=1)

然后在Goods表中添加管理器:
在这里插入图片描述
此时在进行查询:
在这里插入图片描述
可以看到返回的只有上架的商品。
ORM中允许一个数据表中可以存在多个管理器。
我们还可以自定义表级方法,例如我们定义一个查询销量在100以上的商品数量的表级方法:

class StoreManager(models.Manager):
    def sale_count(self):
        import pymysql
        db = pymysql.connect("localhost","root",database="frenshshop",port=9508)
        cursor = db.cursor()
        sql = "SELECT * FROM store_goods WHERE goods_sale > 100"
        result = cursor.execute(sql)
        cursor.close()
        db.close()
        return result

添加管理器:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django基础管理器是指Django框架Manager类,它是一种接口,赋予了Django模型操作数据库的能力。每个Django应用程序的模型都至少有一个Manager,而且所有的Manager都继承自QuerySet类。\[2\]基础管理器允许您执行各种数据库操作,例如创建、读取、更新和删除数据。您可以使用基础管理器来执行各种查询,过滤和排序操作,以及执行聚合和注释等高级数据库操作。基础管理器还提供了一些方便的方法,例如get()、filter()和all(),用于从数据库检索数据。您可以通过在模型类定义自定义管理器来扩展基础管理器的功能。\[2\]要在Django项目使用基础管理器,您需要在settings.py文件的INSTALLED_APPS列表指定项目名称,以便Django能够识别和加载您的应用程序。\[3\] #### 引用[.reference_title] - *1* *3* [Django 基础教程](https://blog.csdn.net/qq_44273429/article/details/125338616)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Django管理器Manager](https://blog.csdn.net/qq_39253370/article/details/108502177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值