10Django的Q对象和F对象
F对象作用:标记字段,无需获取数据库字段到本地就能对数据库中的指定字段进行操作
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="机械工业出版社"))

浙公网安备 33010602011771号