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的web.py框架并从hello world开始编程
Apr 25 Python
python开发之list操作实例分析
Feb 22 Python
教你用python3根据关键词爬取百度百科的内容
Aug 18 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 Python
python标记语句块使用方法总结
Aug 05 Python
Python实现快速排序的方法详解
Oct 25 Python
python的pip有什么用
Jun 17 Python
Python包argparse模块常用方法
Jun 04 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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/09 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP链表操作简单示例
2016/10/15 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
javascript 常用方法总结
2009/06/03 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
koa-router源码学习小结
2018/09/07 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
Python如何判断数独是否合法
2016/09/08 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
写出二分查找算法的两种实现
2013/05/13 面试题
什么是网络协议
2016/04/07 面试题
优秀村官事迹材料
2014/01/10 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
九华山导游词
2015/02/03 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python