Models Manager

  • 修改objects為自定義
from django.db import models
class Person(models.Model):
    #...
    people = models.Manager()
通過以上代碼之后
Person.objects 會(huì)產(chǎn)生一個(gè) AttributeError 異常, 但是Person.people.all() 將會(huì)提供一個(gè)所有的Person的列表.
  • 自定義Manager罐呼,主要用于增加方法或者修改返回值
from django.db import models

class PollManager(models.Manager):
    def with_counts(self):
        from django.db import connection
        with connection.cursor() as cursor:
            cursor.execute("""
                SELECT p.id, p.question, p.poll_date, COUNT(*)
                FROM polls_opinionpoll p, polls_response r
                WHERE p.id = r.poll_id
                GROUP BY p.id, p.question, p.poll_date
                ORDER BY p.poll_date DESC""")
            result_list = []
            for row in cursor.fetchall():
                p = self.model(id=row[0], question=row[1], poll_date=row[2])
                p.num_responses = row[3]
                result_list.append(p)
        return result_list

class OpinionPoll(models.Model):
    question = models.CharField(max_length=200)
    poll_date = models.DateField()
    objects = PollManager()

class Response(models.Model):
    poll = models.ForeignKey(OpinionPoll, on_delete=models.CASCADE)
    person_name = models.CharField(max_length=50)
    response = models.TextField()

以上示例中使用 OpinionPoll.objects.with_counts() 則會(huì)返回一個(gè)OpinionPoll objects列表包含 num_responses 屬性
  • 修改manager初始的QuerrySet
Manager 的基礎(chǔ)QS返回的是所有的成員

from django.db import models
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
Book.objects.all() 將會(huì)返回?cái)?shù)據(jù)庫中所有的書

你可以復(fù)寫Manager的基礎(chǔ)QS嚼沿,通過集成類析命,復(fù)寫Manager.get_queryset() 方法來返回一個(gè)QS但是包含其他所需要的屬性

下屬例子中Book有2個(gè)manager未玻,其中一個(gè)為最原始的manager畅厢,返回的是所有的書本信息列表委粉,
然后添加一個(gè)DahlBookManager, 用于過濾信息蓄愁,這樣的話用戶在使用的時(shí)候可以使用
Models.objetcs 或者 Models.OTHER_MANAGER來調(diào)用不同的manager的方法來返回特定的信息双炕。

# First, define the Manager subclass.
class DahlBookManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(author='Roald Dahl')

# Then hook it into the Book model explicitly.
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    objects = models.Manager() 
    # The default manager. 調(diào)用的時(shí)候就是Book.objects .all()
    dahl_objects = DahlBookManager() 
    # The Dahl-specific manager., 調(diào)用的時(shí)候就是Book.dahl_objects .all()
  • Default managers (django的默認(rèn)manager)
Model._default_manager
如果一個(gè)models中有多個(gè)manager撮抓,這樣系統(tǒng)會(huì)默認(rèn)按代碼的順序把第一個(gè)
Manager設(shè)置為默認(rèn)的Manager妇斤,所有默認(rèn)方法都會(huì)使用該默認(rèn)models的manager去獲取數(shù)據(jù),
使用 Meta.default_manager_name 來指定默認(rèn)的manager
  • base_manager

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市站超,隨后出現(xiàn)的幾起案子荸恕,更是在濱河造成了極大的恐慌,老刑警劉巖死相,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融求,死亡現(xiàn)場離奇詭異,居然都是意外死亡算撮,警方通過查閱死者的電腦和手機(jī)生宛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肮柜,“玉大人陷舅,你說我怎么就攤上這事∩蠖矗” “怎么了莱睁?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長芒澜。 經(jīng)常有香客問我仰剿,道長,這世上最難降的妖魔是什么撰糠? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任酥馍,我火速辦了婚禮,結(jié)果婚禮上阅酪,老公的妹妹穿的比我還像新娘旨袒。我一直安慰自己,他們只是感情好术辐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布砚尽。 她就那樣靜靜地躺著,像睡著了一般辉词。 火紅的嫁衣襯著肌膚如雪必孤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天瑞躺,我揣著相機(jī)與錄音敷搪,去河邊找鬼。 笑死幢哨,一個(gè)胖子當(dāng)著我的面吹牛赡勘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捞镰,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼闸与,長吁一口氣:“原來是場噩夢啊……” “哼毙替!你這毒婦竟也來了谦絮?” 一聲冷哼從身側(cè)響起阱表,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤导匣,失蹤者是張志新(化名)和其女友劉穎噪生,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體月培,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡董栽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年亚享,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞭稼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坑填。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弛姜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妖枚,我是刑警寧澤廷臼,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站绝页,受9級特大地震影響荠商,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜续誉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一莱没、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酷鸦,春花似錦饰躲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至摔握,卻和暖如春寄狼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氨淌。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工泊愧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盛正。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓删咱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛮艰。 傳聞我的和親對象是個(gè)殘疾皇子腋腮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容