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使用arp欺骗伪造网关的方法
Apr 24 Python
Python多进程机制实例详解
Jul 02 Python
解决python 输出是省略号的问题
Apr 19 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
Aug 02 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
Python OrderedDict的使用案例解析
Oct 25 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
PyCharm如何导入python项目的方法
Feb 06 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python小白学习包管理器pip安装
Jun 09 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
python网络编程学习笔记(四):域名系统
2014/06/09 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
介绍一下Java的事务处理
2012/12/07 面试题
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
企业门卫岗位职责
2013/12/12 职场文书
公务员年度个人总结
2015/02/12 职场文书
初婚初育证明范本
2015/06/18 职场文书
导游词之西安骊山
2019/12/20 职场文书
mysql数据库隔离级别详解
2022/06/16 MySQL