今天不巧就用上了。

就是将数据库的字段,自增1的场景。

from django.db.models import F

DeployPool.objects.filter(name=deployversion_id).update(deploy_no=F('deploy_no')+1)

 
详细参考网页:

http://blog.csdn.net/orangleliu/article/details/40431839

django-orm中F对象的使用

前言

django文档中有一节是 Query-related classes,说 的是关联查询,1.7新加上去的,这里的关联是字段的关联,而不是表之间的关联。

表关联中主要用的是3个对象 F(), Q(), 和Prefetch(),其中Prefetch是1.7新加入的,其他两个是之前版本就有的。之前有个需求是比较一张表里的两个时间字段,用到过F这个对象,今天再看djangocon的ppt时候又发现了一些新的用法,于是查询了下文档,小结一下。

概念

class F
F()是代表模型字段的值,也就是说对于一些特殊的字段的操作,我们不需要用python把数据先取到内存中,然后操作,在存储到db中了。

场景

几个常用的情景

字段+1(加减乘除运算)

例如我们有个统计点击量的字段,每次更新的操作其实就是把字段的值加1.

一般我们的做法是把这条记录取出来,把相应字段加+1,然后在save,类似下面的代码:

# Tintin filed a news story!
reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed += 1
reporter.save()

当我们使用了F()之后呢? 只需要一行代码

Reporters.objects.filter(name='Tintin').update(stories_filed=F('stories_filed') + 1)

不仅代码量少了,而且这是直接在数据中操作,效率也变高了,特别是并发的情况,减少了多线程同时操作带来的隐患。 但是不支持字符串相加的操作

字段比较

例如一个合同有两个日期,一个叫做终止日期,一个叫做结束日期,现在要筛选出终止日期小于结束日期的合同。

from django.db.models import F
from contracts.models import Contracts
contracts = Contracts.objects.filter(contract_stop_time__lt=F('end_time'))

如果没有F对象,就没法直接使用rom来查询。

小结

现在时发现这两类用法,如果还有新的用法或者拓展,在更新。

最新文章

  1. 【转】基于.NET平台常用的框架整理
  2. window自动任务实现数据库定时备份
  3. 算法-QuickSort
  4. android使用镜像 Android sdk 和源码等
  5. {POJ}{3925}{Minimal Ratio Tree}{最小生成树}
  6. 文件与目录的rwx权限
  7. BizTalk开发系列(十二) Schema设计之Group与Order
  8. linux 搭建 nexus 私服及配置
  9. struts 的问题是由于没有写的name有缺少的项,没有完全对应
  10. Finding Similar Users-Euclidean Distance Score
  11. 升级gitlab
  12. Centos7 安装python3
  13. Python 模块详解及import本质
  14. srping的历史与哲学
  15. 查看windows电脑CPU核心数,线程数
  16. python学习笔记(四)
  17. Asp.net Mvc action返回多个模型实体给view
  18. Python2 - MySQL适配器 MySQLdb
  19. c# vs2013部署项目
  20. spingboot @EnableScheduling

热门文章

  1. 【ST】【CF855B】 Marvolo Gaunt's Ring
  2. js中字符串全部替换
  3. (二)SMO算法
  4. PID控制算法的C语言实现四 增量型PID的C语言实现
  5. 省选模拟赛 arg
  6. IO多路复用之epoll(二)
  7. isNaN与parseInt/parseFloat
  8. 51nod 1217 Minimum Modular
  9. spring-boot 更换依赖版本
  10. awk正则匹配nginx日志【原创】