Django框架之模型层(二)

F查询与Q查询

F查询

F可以帮我们取到表中某个字段对应的值来当作我的筛选条件,实现了动态比较的效果

查询卖出数大于库存数的商品

# from django.db.models import F,Q
# F查询
# res = models.Product.objects.filter(maichu__gt=F('kucun'))
# print(res)
# 将所有的商品的价格提高100块
# models.Product.objects.update(price=F('price')+100)

#将所有商品的名字后面都加一个爆款
# from django.db.models.functions import Concat
# from django.db.models import Value
# models.Product.objects.update(name=Concat(F('name'),Value('爆款')))

Q查询

filter() 等方法中逗号隔开的条件是与的关系。 如果你需要执行更复杂的查询(例如OR语句),你可以使用Q查询

from django.db.models import F, Q
# res = models.Product.objects.filter(Q(price=188.88),Q(name='连衣裙爆款')) # and
# res = models.Product.objects.filter(Q(price=188.88)|Q(name='连衣裙爆款')) # or
# res = models.Product.objects.filter(Q(price=188.88)|~Q(name='连衣裙爆款')) # not

# 混合使用 需要注意的是Q对象必须放在普通的过滤条件前面
# res = models.Product.objects.filter(~Q(name='连衣裙爆款'),price=188.88) # not

# Q对象补充(******)
# from django.db.models import F, Q
# q = Q()
# q.connector = 'or' # 通过这个参数可以将Q对象默认的and关系变成or
# q.children.append(('price',188.88))
# q.children.append(('name','高跟鞋爆款'))
# res = models.Product.objects.filter(q) # Q对象查询默认也是and
# print(res)

事务

# from django.db import transaction
# from django.db.models import F
# with transaction.atomic():
# # 在with代码块儿写你的事务操作
# models.Product.objects.filter(id=1).update(kucun=F('kucun')-1)
# models.Product.objects.filter(id=1).update(maichu=F('maichu')+1)
#
# # 写其他代码逻辑
# print('hahah')

only与defer 拿到的是一个对象 两者是相反的
# res = models.Product.objects.values('name')
# res = models.Product.objects.only('name')
# res = models.Product.objects.defer('name')
# for i in res:
# print(i.name)

res = models.Product.objects.filter(id=1).first()
print(res.gender)
print(res.get_gender_display()) # 获取编号对应的中文注释
# models.Product.objects.create(...gender=1)

转载于:https://www.cnblogs.com/zhangdajin/p/11019634.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值