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中__str__和__repr__方法的区别
Apr 17 Python
Python实现的简单hangman游戏实例
Jun 28 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
使用python Fabric动态修改远程机器hosts的方法
Oct 26 Python
python list格式数据excel导出方法
Oct 31 Python
python监测当前联网状态并连接的实例
Dec 18 Python
python实现公司年会抽奖程序
Jan 22 Python
python3实现钉钉消息推送的方法示例
Mar 14 Python
python获取array中指定元素的示例
Nov 26 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
Python中的变量与常量
Nov 11 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
国内php原创论坛
2006/10/09 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
php把数组值转换成键的方法
2015/07/13 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python装饰器用法实例总结
2018/05/26 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
如何通过python计算圆周率PI
2020/11/11 Python
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
《走一步再走一步》教学反思
2014/02/15 职场文书
单方投资意向书
2015/05/11 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
关于Vue中的options选项
2022/03/22 Vue.js