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 相关文章推荐
Linux下为不同版本python安装第三方库
Aug 31 Python
Python random模块用法解析及简单示例
Dec 18 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
详解python 模拟豆瓣登录(豆瓣6.0)
Apr 18 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
Python-openCV读RGB通道图实例
Jan 17 Python
python画环形图的方法
Mar 25 Python
如何基于python把文字图片写入word文档
Jul 31 Python
Python 中如何写注释
Aug 28 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 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
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
详解python开发环境搭建
2016/12/16 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
django中间键重定向实例方法
2019/11/10 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
python tkinter实现连连看游戏
2020/11/16 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
群众路线批评与自我批评
2014/02/06 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
岗位说明书怎么写
2014/07/30 职场文书
集体生日活动方案
2014/08/18 职场文书
广告业务员岗位职责
2015/02/13 职场文书
文艺晚会开场白
2015/05/29 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
浅谈Web Storage API的使用
2021/06/23 Javascript