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基础之内置函数和递归
Jun 21 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
python 实现登录网页的操作方法
May 11 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
python实现决策树分类
Aug 30 Python
python 字符串只保留汉字的方法
Nov 16 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
Python爬虫基础讲解之请求
May 13 Python
pytorch常用数据类型所占字节数对照表一览
May 17 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和ACCESS写聊天室(十)
2006/10/09 PHP
PHP新手上路(五)
2006/10/09 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
tagName的使用,留一笔
2006/06/26 Javascript
js的with语句使用方法
2007/09/21 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
pyhton列表转换为数组的实例
2018/04/04 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
Python中SQLite如何使用
2020/05/27 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
环保口号大全
2014/06/12 职场文书
学习十八大标语
2014/10/09 职场文书
让子弹飞观后感
2015/06/11 职场文书
2015年中秋节主持词
2015/07/30 职场文书