模型類-管理器
作用: 用於與數據庫交互
每個模型類默認有一個管理器,objects
objects是Django自動生成的管理器,可以實現對數據的查詢,objects是models.Manger類的一個對象。
爲滿足特殊條件,可以自定義管理器
1、修改管理器的原始查詢集(重寫get_queryset()方法)
class BookInfoManager(models.Manager):
def get_queryset(self):
return super(BookInfoManager,self).get_queryset().filter(isDelete=False)
自定義管理器之後Django不再生成默認的objects管理器
2、模型類對象的創建方法
BookInfo模型類
from django.db import models
class BookInfo(models.Model):
btitle=models.CharField(max_length=20)
bpub_date=models.DateTimeField(db_column='pub_date')
bread=models.IntegerField(default=0)
bcomment=models.IntegerField(default=0)
isDelete=models.BooleanField(default=False)
class Meta:
db_table='bookinfo'
# 管理器的對象作爲模型類的一個屬性
books1=models.Manager()
books2=BookInfoManager()
模型類中__init__
方法不可用
解決方法:
①在模型類中定義一個類方法
@classmethod
def creat(cls,btitle,bpub_date):
b=BookInfo()
b.btitle=title
b.bpub_date=pub_date
b.bread=0
b.bcomment=0
b.isDelete=False
return b
②在自定義的管理器中定義方法(推薦)
class BookInfoManager(models.Manager):
def create(self,btitle,bpub_date):
b=BookInfo()
b.btitle=title
b.bpub_date=pub_date
b.bread=0
b.bcomment=0
b.isDelete=False
return b
調用語法
book=BookInfo.books2.create("abc",date(1980,1,1))
查詢
屬性__比較符(謂詞)=值
btitle__contains='八'
聚合
- Max,Min,Avg
from django.db.modlels import Max
list = BookInfo.books1.aggregate(Max('bpub_date'))
- count
count = list.count()
F對象
比較兩個字段(普通查詢爲字段和常量比較)
from django.db.modlels import Max,F
list = BookInfo.books1.filter(bread__gt=F('bcomment'))
Q對象
過濾器的參數爲邏輯與(&)的關係
若需實現邏輯或(|),使用Q對象
from django.db.models import Q
list = BookInfo.books1.filter(Q(pk__lt(4)|Q(btittle__contains='1'))