10Django的Q对象和F对象

F对象和Q对象

F对象作用:标记字段,无需获取数据库字段到本地就能对数据库中的指定字段进行操作

例如点赞高并发场景使用F对象更新点赞值即可实现如下这条sql语句的效果:

update biao set money = money + 1 where id = xxxx #

#批量更新零售价
Book.objects.all().update(market_price=F('market_price')+10)

此外,F对象还可以在不取值的情况下进行字段值的比较,例如:

对比数据库中的两个字段,看看那些书的零售价高于定价:

from django.db.models import F, Q
from bookstore.models import Book
books=Book.objects.filter(market_price__get=F('price'))
for book in books:
  print(book.title,'定价',book.price,'零售价',book.market_price)

Q对象作用:

或与非,当查询条件复杂时可以考虑使用Q对象,例如:

#找出定价低于20元或清华大学出版社的全部书(&与|或~非)
Book.objects.filter(Q(price__lt=20)|Q(pub="清华大学出版社"))

#知识点:
Q(条件1)&~Q(条件2) #条件1成立且条件2不成立
Q(条件1)&Q(条件2) #条件1与条件2同时成立
Q(条件1)|(条件2) #条件1成立或条件2成立

示例:

from django.db.models import Q
#查找清华大学出版社的书或价格低于50的书
Book.objects.filter(Q(pub_house="清华大学出版社")|Q(market_price__lt=50))
#查找不是机械工业出版社的书且价格低于50的书
Book.objects.filter(Q(market_price__lt=50)&~Q(pub_house="机械工业出版社"))

 

posted @ 2021-11-29 22:15  linuxTang  阅读(95)  评论(0)    收藏  举报