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二分法实现实例
Nov 21 Python
Python中实现三目运算的方法
Jun 21 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
python实现四人制扑克牌游戏
Apr 22 Python
python导入库的具体方法
Jun 18 Python
Python DES加密实现原理及实例解析
Jul 17 Python
python lambda的使用详解
Feb 26 Python
Python实现列表拼接和去重的三种方式
Jul 02 Python
Python Matplotlib绘制条形图的全过程
Oct 24 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
php生成与读取excel文件
2016/10/14 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
vue的mixins属性详解
2018/03/14 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
python爬虫之百度API调用方法
2017/06/11 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Django中modelform组件实例用法总结
2020/02/10 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
kfc实习自我鉴定
2013/12/14 职场文书
洗发露广告词
2014/03/14 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
小学推普周活动总结
2015/05/07 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL