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入门之语句(if语句、while语句、for语句)
Jan 19 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python分支结构(switch)操作简介
Jan 17 Python
python使用生成器实现可迭代对象
Mar 20 Python
python使用udp实现聊天器功能
Dec 10 Python
Python闭包思想与用法浅析
Dec 27 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
Python hashlib常见摘要算法详解
Jan 13 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 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中执行系统外部命令
2006/10/09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python写的ARP攻击代码实例
2014/06/04 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
什么时候需要进行强制类型转换
2016/09/03 面试题
学前教育毕业生自荐信范文
2013/12/24 职场文书
益达广告词
2014/03/14 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
2014年人事科工作总结
2014/11/19 职场文书