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显示生日是星期几的方法
May 27 Python
python PIL模块与随机生成中文验证码
Feb 27 Python
python 实现在Excel末尾增加新行
May 02 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
python 修改本地网络配置的方法
Aug 14 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
教你怎么用Python操作MySql数据库
May 31 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 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
如何开始收听短波广播
2021/03/01 无线电
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
JS 统计时间
2021/03/09 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
python 文件与目录操作
2008/12/24 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python实现教务管理系统
2018/03/12 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
投标承诺书范本
2014/03/27 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
政工例会汇报材料
2014/08/26 职场文书
班委竞选稿范文
2015/11/21 职场文书
golang语言指针操作
2022/04/14 Golang