Django ORM F对象实战:字段运算与多条件排序详解

Hazel
Hazel
发布时间:2026-10-13| 5人浏览过
原创

本文深入解析Django ORM中F对象的核心用法。通过实例演示如何利用F对象进行字段值的原子加减、比较及乘积排序,避免内存读写开销。同时涵盖常规排序、随机排序及关联表字段排序等多种场景,提供高效的数据查询方案。

Django F对象基础与原子更新

F对象

F() 用于表示模型中特定字段的当前值。其核心价值在于,对于涉及字段值的特殊操作,无需先将数据加载至内存进行计算再写回数据库,而是直接在数据库层面完成处理。

以下是几个典型的应用场景:

1. 统计点击量或点赞数(每次递增1)

from django.db.models import F Reporters.objects.filter(id=case_id).update(thumb_num=F('thumb_num') + 1)

2. 比较合同字段:轻松实现终止日期小于结束日期的筛选

from django.db.models import F

contract_list = Contracts.objects.filter(contract_stop_time__lt=F('contract_end_time'))

基于F对象的复杂排序应用

3. 若需按两个字段的和、乘积或差值进行排序,使用 F 类是最佳方案,无需额外添加计算字段。


# 按照总价逆序取前十个
goods_list = Goods.objects.all( ).order_by( F('num') * F('unit_price') ).reversed( )[ :10] 

# 按照点赞与评论数和进行排序
hot_list = Article.objects.all( ).order_by( F('thumb_num') + F('comment_num') ).reversed( )

综上所述,F 对象支持对数据进行算术运算及时间比较操作,是提升查询效率的利器。

Django数据库查询的其他排序方式

补充知识:Django 数据库查询中的多种排序方式

若需按 entry_date 从小到大查询数据,可编写如下代码:

Content.objects.order_by('entry_date')

若需从大到小排序:

Content.objects.order_by('-entry_date')

以下介绍其他类型的排序方法

随机排序:

Content.objects.order_by('?')

需要注意的是,order_by('?') 这种方式可能开销较大且速度较慢,具体表现取决于后端数据库的实现。

按关系表的字段进行排序


class Category(Base):
 code = models.CharField(primary_key=True,max_length=100)
 title = models.CharField(max_length = 255)
class Content(Base):
 title = models.CharField(max_length=255)
 description = models.TextField()
 category = models.ForeignKey(Category, on_delete=models.CASCADE)

# 按照Category的字段code,对Content进行排序,只需要外键后加双下划线
Content.objects.order_by('category__title')
# 如果只是按照外键来排序,会默认按照关联的表的主键排序
Content.objects.order_by('category')
# 上面等价于
Content.objects.order_by('category__code')
# 双下划线返回的是join后的结果集,而单下划线返回的是单个表的集合
Content.objects.order_by('category_title')

注意:无论是单下划线还是双下划线,均可在前端通过 {{ content.category.title }} 获取关联表的数据。

以上关于 django-orm F 对象的使用及按两个字段的和、乘积排序的实例分享完毕,希望能对大家有所帮助,欢迎支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。