Django F对象的使用

概念

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)

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

例2: 一个合同有两个日期,一个叫做终止日期,一个叫做结束日期,现在要筛选出终止日期小于结束日期的合同。
rom django.db.models import F
from contracts.models import Contracts
contracts = Contracts.objects.filter(contract_stop_time__lt=F(‘end_time‘))
如果没有F对象,就没法直接使用rom来查询。

使用场景待续.....
时间: 2024-10-28 03:10:09

Django F对象的使用的相关文章

[django]django-orm中F对象的使用

django-orm中F对象的使用 前言 django文档中有一节是 Query-related classes,说 的是关联查询,1.7新加上去的,这里的关联是字段的关联,而不是表之间的关联. 表关联中主要用的是3个对象 F(), Q(), 和Prefetch(),其中Prefetch是1.7新加入的,其他两个是之前版本就有的.之前有个需求是比较一张表里的两个时间字段,用到过F这个对象,今天再看djangocon的ppt时候又发现了一些新的用法,于是查询了下文档,小结一下. 概念 class

F对象、Q对象、聚合函数

F对象作用:用于类属性之间的比较.使用之前需要先导入:from django.db.models import F例:查询图书阅读量大于评论量图书信息.BookInfo.objects.filter(bread__gt=F('bcomment'))例:查询图书阅读量大于2倍评论量图书信息.BookInfo.objects.filter(bread__gt=F('bcomment')*2) Q对象作用:用于查询时条件之间的逻辑关系.not and or,可以对Q对象进行&|~操作.使用之前需要先导

Objects 多条件 Q对象金额F 对象

Q对象 作用:用于查询条件之间的逻辑关系.not and or ,可以对Q 对象进行 &|- 操作,与或非的操作 使用之前导入: from django.db.models import Q 例:查询id大于3且阅读量大于30的图书的信息 BookInfo.objects.filter(id__gt=3,bread__gt=30) BookInfo.objects.filter( Q(id__gt=3) & Q(bread__gt=30) ) 例:查询id大于3或阅读量大于30的图书的信息

django F expressions 和Q objects

1 F Expressions refer: https://docs.djangoproject.com/en/2.0/topics/db/queries/#using-f-expressions-in-filters 1.1 models结构 1.2 value安全update >>>from django.db.models import F >>>Reporter.objects.all().update(stories_filed=F('stories_fil

【转载】使用信号监控 Django 模型对象字段值的变化

转载出处:http://blog.csdn.net/pushiqiang/article/details/74949465 Django 信号 (Signals) 的功能类似于 WordPress 的动作 (action),用于为项目全局增加事件的广播 (dispatch) 与接收 (receive) 机制.其中,灵活使用其内置的模型信号 (Model Signals) 的接收功能就可以监控大部分模型对象 (Model instances) 的变化.因为不需要修改模型本身的代码,在进行跨应用 (

Django HttpRequest对象的一些属性与方法

HttpRequest对象的属性 属性 描述 path 表示提交请求页面完整地址的字符串,不包括域名,如 "/music/bands/the_beatles/". method 表示提交请求使用的HTTP方法.它总是大写的.例如: if request.method == 'GET': do_something() elif request.method == 'POST': do_something_else() GET 一个类字典对象,包含所有的HTTP的GET参数的信息.见 Qu

django HttpRequest对象

每当一个用户请求发送过来,Django将HTTP数据包中的相关内容,打包成为一个HttpRequest对象,并传递给每个视图函数作为第一位置参数,也就是request,供我们调用. HttpRequest对象中包含了非常多的重要的信息和数据,应该熟练掌握它. 类定义:class HttpRequest[source] 一.属性 HttpRequest对象的大部分属性是只读的,除非特别注明. 1. HttpRequest.scheme 字符串类型,表示请求的协议种类,'http'或'https'.

django HttpResponse对象

HttpResponse对象 概述: 作用:给浏览器返回数据 HttpRequest对象是由Django创建的,HttpResponse对象是由程序员创建 用法: 不用模板,直接返回数据 语句示例:return HttpResponse("Sunck is a good man") 调用模板 使用render方法 原型:render(request, templateName[, context]) 作用:结合数据和模板,返回一个完整的HTML页面 参数: request:请求体对象

Python - Django - request 对象

request.method: 获取请求的方法,例如 GET.POST 等 views.py: from django.shortcuts import render, HttpResponse # request 对象 def test(request): print(request.method) return render(request, "test.html") 访问页面 可以通过 request.method 查看请求方式 request.GET: 用来获取 URL 里面的