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列表操作实例
Jan 14 Python
Python获取服务器信息的最简单实现方法
Mar 05 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
python学习必备知识汇总
Sep 08 Python
python字符串string的内置方法实例详解
May 14 Python
pandas 选择某几列的方法
Jul 03 Python
详解python while 函数及while和for的区别
Sep 07 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
Python3标准库总结
Feb 19 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python flask搭建web应用教程
Nov 19 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 curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
微信小程序自定义底部弹出框
2020/11/16 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python装饰器使用方法实例
2013/11/21 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
前台文员岗位职责
2013/12/28 职场文书
党员承诺践诺书
2014/05/20 职场文书
委托书怎么写
2014/07/31 职场文书
法务专员岗位职责
2015/02/14 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
中学音乐课教学反思
2016/02/18 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python