Django4.0 管理器-添加額外的管理器方法

2022-03-16 18:04 更新

添加額外的 ?Manager ?方法一般是為模型添加 “表級(jí)” 功能的更好方法。(對(duì)于 “行級(jí)” 功能 —— 即,只操作單個(gè)模型對(duì)象 —— 通過 模型方法,而不是自定義 ?Manager ?的方法。)

例如,這個(gè)自定義 ?Manager ?添加了一個(gè)方法 ?with_counts()?:

from django.db import models
from django.db.models.functions import Coalesce

class PollManager(models.Manager):
    def with_counts(self):
        return self.annotate(
            num_responses=Coalesce(models.Count("response"), 0)
        )

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

class Response(models.Model):
    poll = models.ForeignKey(OpinionPoll, on_delete=models.CASCADE)
    # ...

在此示例中,您將使用 ?OpinionPoll.objects.with_counts()? 獲取附加了額外 ?num_responses? 屬性的 ?OpinionPoll對(duì)象的 ?QuerySet?。

自定義 ?Manager方法能返回任何東西,沒有強(qiáng)制它必須返回一個(gè) ?QuerySet?。

另一件需要注意的是,?Manager方法可以訪問 ?self.model? 以獲取它們所附加的模型類。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)