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 相关文章推荐
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
python异步存储数据详解
Mar 19 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 Python
python2和python3哪个使用率高
Jun 23 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
python绘制汉诺塔
Mar 01 Python
利用Python+OpenCV三步去除水印
May 28 Python
Python中time与datetime模块使用方法详解
Mar 31 Python
Python软件包安装的三种常见方法
Jul 07 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
Javascript模板技术
2007/04/27 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
Python实现二叉堆
2016/02/03 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Python面向对象特殊成员
2017/04/24 Python
简单易懂的python环境安装教程
2017/07/13 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
Django实现分页功能
2018/07/02 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
《蚕姑娘》教学反思
2014/04/15 职场文书
国庆节活动总结
2014/08/26 职场文书
2014年采购部工作总结
2014/11/20 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android