博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django 数据库操作进阶F和Q操作
阅读量:4588 次
发布时间:2019-06-09

本文共 1450 字,大约阅读时间需要 4 分钟。

Model中的F

  F 的操作通常的应用场景在于:公司对于每个员工,都涨500的工资。这个时候F就可以作为查询条件

1
2
3
from 
django.db.models 
import 
F
models.UserInfo.objects.
filter
().update(salary
=
F(
'salary'
)
+
500
)
# F('salary')就表示salary在这行记录中的值。

  F的使用场景基本就是这样,比较简单。

Model中的Q

  Q 的操作通常的应用场景在于:构造搜索条件。

  普通filter搜索条件支持三种传参方式:1. 传具体参数  2.传字典  3.传Q对象。具体例子如下

1. 传具体参数

1
models.UserInfo.objects.
filter
(
id
=
3
,name
=
'Bob'
)

2. 传字典

1
2
dic 
= 
{
'id'
:
3
,
'name'
:
'Bob'
}
models.UserInfo.objects.
filter
(
*
*
dic)

3. 传Q对象--通常会用在进行构造组合搜索

步骤显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
类型一: 构建简单搜索条件
# 1. 导入Q模块
from 
django.db.models 
import 
Q
# 2. 传入条件进行查询
q1 
= 
Q()          
# 创建Q对象实例
q1.connector 
= 
'OR'                      
# 多个条件之间以or形式连接
q1.children.append((
'id'
1
))  
q1.children.append((
'id'
2
))
q1.children.append((
'id'
3
))
     
models.Tb1.objects.
filter
(q1)   
# 传入简单的Q对象进行查询,每个查询条件之间以or连接
#--------------------------------------------------------------------------------#
类型二:构建复杂搜索条件
# 1. 导入Q模块
from 
django.db.models 
import 
Q
# 2. 创建Q对象实例
con 
= 
Q()
# 3. 创建条件q1
q1 
= 
Q()
q1.connector 
= 
'OR'
q1.children.append((
'id'
1
))  
# 这三个条件以or的形式连接
q1.children.append((
'id'
2
))
q1.children.append((
'id'
3
))
 
# 4. 创建条件q2
q2 
= 
Q()
q2.connector 
= 
'OR'
q2.children.append((
'status'
'在线'
))
# 5. 指定不同搜索条件之间以and还是or来连接
con.add(q1, 
'AND'
)
con.add(q2, 
'AND'
)        
# 表示q1与q2之间通过and来连接
 
models.Tb1.objects.
filter
(con) 
#传入复杂Q对象进行搜索

 

转载于:https://www.cnblogs.com/ExMan/p/10433160.html

你可能感兴趣的文章
调用底层不能直接访问的类和方法
查看>>
清理缓存的方法 #DF
查看>>
JAVA array,map 转 json 字符串
查看>>
2017-12-27练习
查看>>
NET设计规范(二) 命名规范
查看>>
VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
查看>>
SSL延迟
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>
深入理解DIP、IoC、DI以及IoC容器
查看>>
赋值文件
查看>>
Vue 数组 字典 template v-for 的使用
查看>>
蓝牙模块选择经验谈
查看>>
java中==和equals
查看>>
CCActionPageTurn3D
查看>>
python random
查看>>
esp32-智能语音-cli(调试交互命令)
查看>>
netty与MQ使用心得
查看>>
apache反向代解决绝对路径可能出现的问题
查看>>
Oracle Metadata
查看>>
jquery 实现3d切割轮播图
查看>>