django-orm F对象的使用 按照两个字段的和,乘积排序实例


Posted in Python onMay 18, 2020

class F

F()是代表模型字段的值,也就是说对于一些特殊的字段的操作,我们不需要数据先取到内存中,然后操作,在存储到db中了。

以下为几个使用的经典场景:

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'))

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对象支持对数据的算术运算,还有时间比较操作,真的是query利器。

补充知识:Django查询数据库时各种种类的排序

按照entry_date从小到大查询数据,可以写成:

Content.objects.order_by('entry_date')

从大到小排序:

Content.objects.order_by('-entry_date')

下面介绍其他种类的排序

随机排序:

Content.objects.order_by('?')

但是order_by(?)这种方式也许expensive并且slow,这取决于后端数据库。

按照关系表的字段排序

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')

Note: 无论是单下划线还是双下划线,我们都可用{{ content.category.title }}在前端获取到关联表的数据。

以上这篇django-orm F对象的使用 按照两个字段的和,乘积排序实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的else子句使用指南
Feb 27 Python
Python处理JSON时的值报错及编码报错的两则解决实录
Jun 26 Python
python2.7实现邮件发送功能
Dec 12 Python
使用python制作一个为hex文件增加版本号的脚本实例
Jun 12 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
详解Python绘图Turtle库
Oct 12 Python
Python高级property属性用法实例分析
Nov 19 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
哪些是python中web开发框架
Jun 17 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 #Python
django queryset相加和筛选教程
May 18 #Python
python中JWT用户认证的实现
May 18 #Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 #Python
python 实现分组求和与分组累加求和代码
May 18 #Python
Django ORM实现按天获取数据去重求和例子
May 18 #Python
如何实现更换Jupyter Notebook内核Python版本
May 18 #Python
You might like
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
图片完美缩放
2006/09/07 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
js实现随机点名程序
2020/09/17 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
浅谈python import引入不同路径下的模块
2017/07/11 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
python为什么要安装到c盘
2020/07/20 Python
利用python 下载bilibili视频
2020/11/13 Python
大学生评语大全
2014/04/18 职场文书
教师对学生的评语
2014/04/28 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
寻找成龙观后感
2015/06/12 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python