Django筆記(模型類-管理器)

模型類-管理器

作用: 用於與數據庫交互

每個模型類默認有一個管理器,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'))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章