F对象和Q对象

F对象

  • 一个F对象代表数据库中某条记录的字段信息(F对象不会把数据取出来)
  • 作用
    • 通常是对数据库中的字段值在不获取的情况下进行操作
    • 用于类属性(字段)之间的比较
from django.db.models import F
F('列名')

可以转化成标记的SQL语句

Asset.objects.all().update(new_price=F("price") +1 )
转化为SQL语句
UPDATE xxx set like = like +1 where id = 1

Q对象

  • 挡在获取查询结果集使用复杂的逻辑或|、逻辑非~、逻辑与&等操作时可以借用Q对象进行操作

如果我想找出服务器核心数低于32核或是admin创建的服务器信息

from django.db.models import Q
Asset.objects.filter(Q(cpu__lt=32)|Q(create_user="admin"))
Q(条件1)|Q(条件2) # 条件1成立或条件2成立
Q(条件1)&Q(条件2) # 条件1和条件2同时成立
Q(条件1)&~Q(条件2) # 条件1成立且条件2不成立