Django:模型_QuerySet对象

本文深入探讨Django的QuerySet API,包括filter(), get(), all(), values(), values_list()等方法的使用,以及如何进行链式调用、切片、遍历和转换为JSON序列。通过实例解析了Django ORM中的查询技巧,帮助开发者更高效地操作数据库。" 123585153,12138528,Maven安装与配置教程:IDEA中创建Maven Webapp项目,"['Maven', 'IDEA', 'Java开发', '构建工具']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QuerySet API

我们通常做查询操作的时候都是通过"模型名字.objects"的方式进行操作的。其实"模型名字.objects"是一个"django.db.models.manager.Manager"对象,而Manager这个类是一个"空壳"的类,它本身是没有任何的属性和方法的。它的方法全部都是通过Python以动态添加的方式,从QuerySet类中拷贝过来的(至于是如何拷贝的后面简单的介绍下,知道就好)

 

:本章的所有例子,大都基于这个模型类

 

例1:
⑴打印"模型名字.objects"

⑵查看"Manager"类
    ①通过步骤1的输出可以看到"模型名字.objects"返回的是一个"Manager"对象,因此查看"Manager"类
    ②导入"Manager"类:from django.db.models.manager import Manager
    ③选中"Manager"后Ctrl+B:查看源码
    

⑶查看"from_queryset"方法

注:
上面的源码什么的我是看得不是很懂的,只是想说明下:"objects"对象下面的方法都是从"QuerySet"对象下拷贝过来的,"QuerySet"对象对象下的方法,可以直接在"objects"对象下调用

 

 

返回新的QuerySet的方法

1、在使用QuerySet进行查找操作的时候,可以提供多种操作。比如过滤完后还要根据某个字段进行排序,那么这一系列的操作我们可以通过一个非常流畅的"链式调用"的方式进行。比如要从文章中获取标题为123,并且提取后要将结果根据发布时间进行排序,那么就可以通过下面的方式来完成:"article=Article.objects.filter(title='123').order_by('create_time')"

2、可以看到order_by方法是直接在filter()方法执行后调用的。这说明filter()方法返回的是一个拥有order_by方法的对象。而这个对象正是一个新的QuerySet对象,因此可以使用order_by方法(当然QuerySet对象还可以使用其他方法,这里只是以filter方法和order_by方法举例)

3、只要返回的数据是一个QuerySet对象,那么就可以调用QuerySet对象方法(链式调用或分步调用)。特别注意object对象中的方法是复制QuerySet对象下的方法的,因此object对象也可以直接调用QuerySet对象方法

4、本章介绍的都是QuerySet对象方法,因此这些方法都是可以组合使用的(除了有些QuerySet对象方法返回的不是QuerySet对象)

例1_1:

    info = User.objects.filter(create_time__gt="2020-10-14 21:58:48").filter(telephone=13355509333)
    print(info)
    #<QuerySet [<User: User object (8)>]>
    user = info = User.objects.filter(create_time__gt="2020-10-14 21:58:48")
    print(type(user))
    print(user.filter(telephone=13355509333))
    # <class 'django.db.models.query.QuerySet'>
    # <QuerySet [<User: User object (8)>]>

注:
1、上面例子中分别使用了两种写法来实现同一个查询

2、filter()本来就是QuerySet对象下面的方法:返回的是一个QuerySet对象,因此这个QuerySet对象又可以继续使用QuerySet对象下面的方法(也就是这两章将要介绍的方法)
    这里只是以两个filter()方法为例

3、一般采用的都是第一种写法,也就是"链式调用"

 

 

QuerySet对象方法

filter()

1、作用:将满足条件的数据提取出来,返回一个新的QuerySet对象

2、不论查询结果中有多少条数据都可以正常返回,无数据时也会返回一个空的QuerySet对象

例2:
⑴查看数据

⑵编辑视图:首次调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值