Django models filter筛选条件

本文详细介绍了Django ORM中QuerySet的各种条件筛选方法,包括filter、exclude、distinct及各种查询运算符如__exact、__contains、__gt等的使用方法。同时,也讲解了如何获取字段的distinct值。

条件选取querySet的时候,filter表示=,exclude表示!=。
querySet.distinct() 去重复
__exact 精确等于 like 'aaa'
 __iexact 精确等于 忽略大小写 ilike 'aaa'
 __contains 包含 like '%aaa%'
 __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False

 

例q1.filter(pub_date__gte=datetime.date.today())表示为时间>=now,q1.exclude(pub_date__gte=datetime.date.today())表示为<=now

 

“在django models中取得一个字段的distinct值”。就是select distinct xxx from table_name ...这样的功能。使用values会生成ValuesQuerySet(形如N个dict组成的list),猜测大数据无额外性能影响,毕竟queryset系列都是使用时才查询操作的。
xxxx.objects.values("field_name").distinct() 或者 xxxx.objects.distinct().values("field_name")

### 使用 Django 的 `filter` 方法筛选查询集 在 Django 中,`filter()` 是一种用于创建复杂数据库查询的方法之一。此方法允许通过指定参数过滤 QuerySet 的结果[^1]。 当调用模型管理器中的 `filter()` 函数时,可以传递关键字参数来定义要匹配的数据条件。这些关键字通常对应于模型字段名称及其期望值之间的映射关系。例如: ```python from myapp.models import Book # 获取所有出版年份为2020年的书籍对象列表 books_2020 = Book.objects.filter(published_year=2020) for book in books_2020: print(book.title, book.author) ``` 如果需要组合多个条件,则可以通过连续添加更多键值对作为参数实现逻辑上的 AND 运算;也可以利用 Q 对象来进行 OR 或更复杂的布尔表达式的构建[^2]。 对于返回的结果,默认情况下会得到一个新的 QuerySet 实例而不是立即执行 SQL 查询语句。这意味着可以在后续链式调用其他方法之前继续修改这个集合的内容,比如排序 (`order_by`)、分页等操作[^3]。 为了确保只获取所需数据并提高性能,在实际应用中应当尽可能精确地设置过滤条件,并考虑使用 `.values()` 或者 `.only()` 来减少传输给客户端的信息量。 ```python # 只提取特定字段 titles_and_authors = Book.objects.filter(published_year__gte=2019).values('title', 'author') # 仅加载部分关联属性 selected_books = Book.objects.only('id', 'name').all() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值