详解Django的 filter() 函数:过滤查询集合

yizhihongxing

当我们需要从数据库中获取特定数据时,我们可以使用 Django ORM 的 filter() 函数来筛选满足需求的数据,其作用相当于 SQL 中 WHERE 子句。

filter() 函数的使用方法

filter() 函数的一般形式是:Model.objects.filter(过滤条件)

过滤条件可以是以下内容:

  • 精确等于:field=value
  • 大于、小于、大于等于、小于等于:field__gt=valuefield__gte=valuefield__lt=valuefield__lte=value
  • 列表、范围:field__in=[value1, value2, ...]field__range=[value1, value2]
  • 模糊查询:field__contains=valuefield__startswith=valuefield__endswith=value

其中,field 是模型类中的字段名,value 是你需要查询的值。除特殊说明外,查询符号(=>等)必须紧贴字段名,并用两个下划线隔开。

我们还可以通过 andornot 等逻辑操作符来组合条件。

实例一:

我们有以下模型:

class Member(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    gender = models.CharField(max_length=1)

现在需要查询所有性别为男性且年龄在 18 岁到 30 岁之间的成员,可以这样实现:

men = Member.objects.filter(gender='M', age__range=[18, 30])

实例二:

现在有以下模型:

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    publisher = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    pub_date = models.DateField()

现在需要查询所有价格大于等于 100 元且出版日期在 2020 年 1 月 1 日之后的图书,实现方式如下:

books = Book.objects.filter(price__gte=100, pub_date__gte='2020-01-01')

注意:日期格式应该符合 YYYY-MM-DD 的规范,否则会出现查询错误。

filter() 函数的返回值

filter() 函数的返回值是一个 QuerySet 对象,它实质上是一个查询结果集的惰性对象,也就是说并不会立即查询数据库,而是在调用它的方法时才会去执行 SQL 查询。

如果需要立即查看查询结果,则需要使用方法 list() 或者 for 循环遍历这个 QuerySet 对象,例如:

men_age_list = [men.age for men in men]

上述代码中,我们使用列表推导式对查询结果进行了处理,将查询结果中的每一条数据的年龄提取出来,存入了列表 men_age_list 中。

总结

  • filter() 函数用来从数据库中筛选查询符合一定条件的数据。
  • 过滤条件可以是精确等于、大于、小于、列表、范围、模糊查询等。
  • 查询结果是一个 QuerySet 对象。
  • QuerySet 对象是惰性对象,需要使用 list() 方法或者循环遍历才能立即查看查询结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django的 filter() 函数:过滤查询集合 - Python技术站

(0)
上一篇 2023年3月23日
下一篇 2023年3月23日

相关文章

  • 详解Django的 get_paginate_by() 函数:获取每页显示的数量

    Django的get_paginate_by()函数用于设置分页时每页显示的数据量。下面是该函数的详细介绍与使用方法攻略。 get_paginate_by()函数的作用 在Django中,分页是非常常见的操作,我们通常使用Paginator来实现分页功能,分页时通常需要指定每一页显示的数据量。在Paginator中,可以使用get_paginate_by()…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 as_view() 函数:将 Django 视图转换为类视图

    1. Django中的as_view()函数 在Django中,我们可以通过as_view()函数将我们的视图转换为可调用对象并返回。as_view()函数的主要作用是将Django中的class-based views(基于类的视图)转换为函数视图,并返回一个由as_view()生成的可调用对象。这个可调用对象 wraps(包装)了实际view()方法,用…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 values_list() 函数:获取指定字段的列表

    Django 的 values_list() 函数用于从 QuerySet 中返回一个列表,该列表包含一个或多个字段的值。这个函数的使用方法如下: values_list(*fields, flat=False, named=False) 该函数有三个参数: *fields: 字段名列表。应该是字符串或关联的字段名列表。或者,可以使用双下划线指定关联的字段。…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 permission_required() 函数:装饰器,限制未授权用户访问视图

    下面是关于Django的permission_required()函数的详细讲解、使用方法以及实例说明。 1. permission_required()函数的作用 Django中的permission_required()函数是一个装饰器,用于限制用户访问需要特定权限的视图函数。如果用户没有权限,则会重定向到登录页面或者一个特定的权限不足页面。 2. pe…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 get_template_names() 函数:获取视图所使用的模板名称

    get_template_names() 是 Django TemplateView 和其子类中的一个方法,用于获取模板文件的名称列表。在 TemplateView 中,该方法会返回一个包含了视图名称的模板名列表,按照先后顺序进行检查。如果检查到某个模板存在,则该模板将被使用。如果没有找到,则会抛出一个 TemplateDoesNotExist 异常。 作用…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 create() 函数:创建对象

    当使用Django ORM作为后端数据库操作模块时,create()函数提供了方便的功能能够快速创建并保存一个模型实例。下面将详细讲解create()函数的作用和使用方法,同时提供两个实例进行说明。 作用 create()函数的作用是创建一个新的模型实例,并将其保存至数据库中。 使用方法 create()函数是一个类方法,可以在模型类上直接调用,使用方式如下…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 select_related() 函数:对关联对象进行选择

    Django select_related()函数 select_related()函数是Django中用于 优化查询性能 的一个重要函数。 使用select_related()可以使查询数据时,Django在所有涉及到联合查询的外键开始处进行一次性的联合查询,从而减少了多次访问数据库的必要性。 当一个查询涉及多个表时,使用select_related()可…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 count() 函数:统计查询结果的数量

    当使用Django ORM进行数据库查询时,我们经常需要统计查询结果的数量。这时就可以使用Django提供的count()方法。下面是对count()函数作用与使用方法的完整攻略: 作用 count()方法用来统计符合查询条件的结果数量,返回一个整数。它通常用于数据分析、数据报表等场景。 使用方法 count()方法可以用在查询集(QuerySet)上,也可…

    Django函数大全 2023年3月23日
    00
合作推广
合作推广
分享本页
返回顶部