当前位置: 首页 > 后端技术 > Python

Django笔记十:ValueSpecifiedFields和去重

时间:2023-03-26 16:44:39 Python

本篇笔记将介绍reverse、distinct、values和values_list的用法。本篇注释内容如下:reverse()values()values_list()distinct()using()1、reverse()对QuerySet返回的结果进行反转,使用方法如下:fromblog.modelsimportBlogBlog.objects.filter(id__gte=2).reverse()通过reverse()方法可以将数据原顺序倒过来返回。2、如果不使用values()方法,QuerySet会返回模型的所有字段,可以通过obj.field_name获取。例如:blog_obj=Blog.objects.all()[0]blog_obj.name如果我们在运行的时候只想获取某个字段或者某几个字段的数据,可以使用values()函数。如果指定字段使用values()方法,则只返回对应字段的字典列表,例如:name_dict_list=Blog.objects.values("name")name_dict_list数据为:name_dict_list可以通过下标访问单条数据。>>>name_dict_list[0]{'name':'python3'}>>>name_dict_list[0].get('name')'python3'没有指定字段如果我们不指定values()的参数当我们使用它的函数时,返回的是模型所有字段的字典列表。例如,如果Blog模型有三个字段:id、name和tagline,则返回的列表是包含所有字段的字典列表。使用:Blog.objecrs.filter(id=1).values()返回:处理字段值返回也可以对values指定的字段值进行处理后返回,例如全部小写:fromdjango.db.models.functionsimportLowerBlog.objects.values(lower_name=Lower('name'))获取外键字段,也可以获取外键字段,指定外键加双下划线和字段名即可:Entry.objects.values('blog__name')3.values_list()values()函数返回的结果是一个字典列表,列表中的元素一个一个是字典。values_list()函数返回元组列表,效果如下:Entry.objects.values_list('id','headline')如果我们只需要获取一个字段,返回的是一个元组列表,但是为了方便,我们也可以将其改为列表格式,加上flat参数。注意:这种情况只存在于只有一个字段需要获取的情况下。entry.objects.values_list('id',flat=True)这个方法比较好用,所以我在项目中经常用到。4.distinct()相当于mysql的DISTINCT的用法,需要用到前面介绍的values()方法。假设TestModel属于db2数据库,使用方法如下:TestModel.objects.using('other').all()其实我们一直使用的query默认都是指向default数据库的,所以省略了using()的用法,所以下面两个方法是等价的:会介绍select_related、foreignkeyrelated、Prefetch_related等用法,可以帮助我们在访问数据库的时候减少访问数据库的次数。