# F查询 # 1.查询卖出数大于库存数的书籍 # F查询 """ 能够帮助你直接获取到表中某个字段对应的数据 """ from django.db.models import F # res = models.Book.objects.filter(maichu__gt=F('kucun')) # print(res) # 2.将所有书籍的价格提升500块 # models.Book.objects.update(price=F('price') + 500) # 3.将所有书的名称后面加上爆款两个字 """ 在操作字符类型的数据的时候 F不能够直接做到字符串的拼接 """ from django.db.models.functions import Concat from django.db.models import Value models.Book.objects.update(title=Concat(F('title'), Value('爆款'))) # models.Book.objects.update(title=F('title') + '爆款') # 所有的名称会全部变成空白
# Q查询 # 1.查询卖出数大于100或者价格小于600的书籍 # res = models.Book.objects.filter(maichu__gt=100,price__lt=600) """filter括号内多个参数是and关系""" from django.db.models import Q # res = models.Book.objects.filter(Q(maichu__gt=100),Q(price__lt=600)) # Q包裹逗号分割 还是and关系 # res = models.Book.objects.filter(Q(maichu__gt=100)|Q(price__lt=600)) # | or关系 # res = models.Book.objects.filter(~Q(maichu__gt=100)|Q(price__lt=600)) # ~ not关系 # print(res) # <QuerySet []> # Q的高阶用法 能够将查询条件的左边也变成字符串的形式 q = Q() q.connector = 'or' q.children.append(('maichu__gt',100)) q.children.append(('price__lt',600)) res = models.Book.objects.filter(q) # 默认还是and关系 print(res)