F函数(标记字段)
应用场景1评论点赞:
今天天气很好 ! (点赞按钮)
def add_like(request,topic_id):
topic = Topic.objects.get(id=topic_id)
更新(无法解决高并发问题,如果10000个人同时进来 topic.like却还是0)
new_like=topic.like + 1
topic.like=new_like
topic.save()
F解决办法(F相当于给其中加入了锁,解决高并发问题 实时变动数据+1)
topic.like=F('like')+1
topic.save()
应用场景2个字段之间的比较
from django.db.models import F
from bookstore.models import Book
books = Book.objects.filter(market_price__gt=F('price'))
for book in books:
print(book.title,'定价:',book.price,'现价:',book.market_price)
(或与非)
Q对象解决得问题(使用复杂的逻辑或 | ,逻辑非等操作时,可以借助Q对象进行操作)
找出定价低于20或者清华学出版社的全部图书
from django.db.models import Q
books.objects.filter(Q(price_lt=20) | Q(pub="清华大学出版社"))
Q(条件1)| Q(条件2) 条件1成立或者条件2成立
Q(条件1)& Q(条件2) 条件1,条件2同时成立
Q(条件1)&~ Q(条件2) 条件1成立且条件2不成立