QuerySet API
返回新 QuerySet 的方法
filter(**kwargs)
返回一个新的 QuerySet,其中包含与给定查找参数相匹配的对象。多个参数通过底层 SQL 语句中的 AND 连接。
exclude(**kwargs)
返回一个新的 QuerySet,其中包含与给定查找参数不匹配的对象。多个参数通过底层 SQL 语句中的 AND 连接,整个过程用 NOT() 括起来。
排序
order_by(*fields)
默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的。你可以通过使用 order_by 方法在每个 QuerySet 的基础上覆盖这一点。
举例:Entry.objects.filter(pub_date__year=2005).order_by('-pub_date','headline')
上述结果将按 pub_date 降序排列,然后按 headline 升序排列。"-pub_date" 前面的负号表示降序。升序是隐含的。
可以通过在表达式上调用 asc() 或 esc(),按 查询表达式 排序:
Entry.objects.order_by(Coalesce('summary','headline').desc())
asc() 和 esc() 有参数(nulls_first 和 nulls_last)来控制如何对空值进行排序。
反向查询
reverse()
使用 reverse() 方法来反向返回查询集元素的顺序。第二次调用 reverse() 会将顺序恢复到正常方向。
要检索一个查询集中的“最后”五个项目,你可以这样做:
my_queryset.reverse()[:5]
去重
distinct(*fields)
返回一个新的 QuerySet,在其 SQL 查询中使用 SELECT DISTINCT。这将消除查询结果中的重复记录。
比较函数
范围字段支持标准查询:lt、gt、lte 和 gte。这些并没有特别大的帮助——它们先比较下界,然后在必要时才比较上界。这也是用于按范围字段排序的策略。最好是使用特定的范围比较运算符。
gt : 大于 (举例:Entry.objects.filter(id__gt=4) SQL 等价于:SELECT...WHEREid>4;)
gte : 大于等于
lt : 小于
lte : 小于等于