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字段對應的註釋