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 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
探究Python中isalnum()方法的使用
May 18 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
Python中类型检查的详细介绍
Feb 13 Python
Python实现网站注册验证码生成类
Jun 08 Python
在python里从协程返回一个值的示例
Feb 19 Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 Python
python怎么自定义捕获错误
Jun 29 Python
pytorch 使用半精度模型部署的操作
May 24 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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版淘宝网查询商品接口代码示例
2014/06/17 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
python和php哪个更适合写爬虫
2020/06/22 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
Solaris操作系统的线程机制
2015/07/28 面试题
大学生创业计划书的用途
2014/01/08 职场文书
学校节能减排倡议书
2014/05/16 职场文书
网聊搭讪开场白
2015/05/28 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
详解NodeJS模块化
2021/06/15 NodeJs
Mysql如何查看是否使用到索引
2022/12/24 MySQL