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中的多线程实例教程
Aug 27 Python
安装dbus-python的简要教程
May 05 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
python3实现windows下同名进程监控
Jun 21 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
python自动化生成IOS的图标
Nov 13 Python
python儿童学游戏编程知识点总结
Jun 03 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
python中的插入排序的简单用法
Jan 19 Python
解决python 输出到csv 出现多空行的情况
Mar 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
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
jquery实现数字输入框
2017/02/22 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python 移动光标位置的方法
2019/01/20 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
深入了解Python 变量作用域
2020/07/24 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
主持稿开场白
2015/06/01 职场文书
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis