F查询 from django.db.models import F,Q # 当查询条件来自于数据库的某个字段,这个时候就必须使用F # 查询卖出数大于库存数的商品 res = models.Product.objects.filter(maichu__gt=F('kucun')) # 将所有商品的价格提高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=F('name')+'爆款') # 错误示范 models.Product.objects.update(name=Concat(F('name'),Value('爆款'))) Q查询 # 当你的查询条件想以或的关系查询数据 models.Product.objects.filter(Q(name='变形金刚'),Q(price=999.99)) # 这样写默认还是and关系 models.Product.objects.filter(Q(name='变形金刚')|Q(price=999.99)) # Q与普通过滤条件混合使用 models.Product.objects.filter(Q(name='变形金刚'),price=100.00) Q查询进阶操作(******) # 先实例化一个Q对象 q = Q() q.connector = 'or' q.children.append(('name','jason')) q.children.append(('price',666)) # q对象支持直接放在filter括号内 models.User.objects.filter(q) # q对象默认也是and关系 事务 from django.db import transaction with transaction.atomic(): # 这里写多个数据库操作 print('其他逻辑代码') 自定义字段类型 class MyCharField(models.Field): def __init__(self,max_length,*args,**kwargs): self.max_length = max_length super().__init__(max_length=max_length,*args,**kwargs) def db_type(self): return 'char(%s)'%self.max_length class User(models.Model): name = models.CharField(max_length=32) password = MyCharField(max_length=32) only与defer # 两者是相反的 res = models.User.objects.only('name') choices字段 class User(models.Model): name = models.CharField(max_length=32) password = MyCharField(max_length=32) choices = ((1,'重点大学'),(2,'普通本科'),(3,'专科'),(4,'其他')) education = models.IntegerField(choices=choices) user_obj.education # 拿到的是数字 user_obj.get_education_display() # 固定用法 获取choice字段对应的注释