前言 :有时候需要一些相对复杂点的数据操作,总结了下,于是有了这篇文章 ,简单明了
Q对象
Q对象是Django对model查询中所使用的关键字参数进行封装后的一个对象。
Q对象可以通过 &(与)、 |(或)、 ~(非)运算来组合生成不同的Q对象,便于在查询操作中灵活地运用。
比如,对一个记录书籍信息的 BookInfo 表进行一些查询操作:
from django.db.models import Q
#查询作者是 小明 或 作者姓名包含 红 的书籍
ret1 = BookInfo.objects.filter(auth="小明")
ret2 = BookInfo.objects.filter(auth__contains="红")
#使用Q对象进行查询
q = Q(Q(name="小明")|Q(name__contains="红"))
ret = BookInfo.objects.filter(q)
#!!如果在查询时同时传入关键字参数与Q对象,需要将关键字参数放在最后面
F对象
F对象通常是对数据库中的字段值在不获取的情况下进行操作
比如说小明火了,我们对他的书都涨价10元
all = BookInfo.objects.filter(auth="小明")
for b in all:
price = b.price
b.price = price + 10
b.save
# 使用F对象来计算
BookInfo.objects.filter(auth="小明").update(price=F("price")+10)