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 smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python使用django获取用户IP地址的方法
May 11 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
TensorFlow数据输入的方法示例
Jun 19 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
django 信号调度机制详解
Jul 19 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
简单且有用的Python数据分析和机器学习代码
Jul 02 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
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
php while循环控制的简单实例
2016/05/30 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
基于matplotlib xticks用法详解
2020/04/16 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
python中time.ctime()实例用法
2021/02/03 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
为什么group by 和order by会使查询变慢
2014/05/16 面试题
宠物店的创业计划书范文
2014/01/11 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
材料员岗位职责
2014/03/13 职场文书
教师辞职书范文
2015/02/26 职场文书
2015年药店工作总结
2015/04/20 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS