Django2.2丨管理器

Django模型的Manager接口用于操作数据库,每个模型默认有一个名为objects的Manager。可以通过自定义管理器来重命名或扩展其功能,如添加特定的方法返回定制的QuerySet。自定义Manager的方法可以返回任何类型,不仅限于QuerySet,这提供了在模型级别增加功能的灵活性。此外,一个模型可以有多个管理器,并且能够调用自定义QuerySet方法以实现特定的数据筛选需求。
摘要由CSDN通过智能技术生成

Manager是一种接口,它赋予了Django模型操作数据库的能力。Django应用中每个模型拥有至少一个Manager。

管理器名称

默认情况下,Django为每个模型类添加一个名为objects的Manager。可以通过自定义重命名Manager。

from django.db import models

class Person(models.Model):
    #...
    people = models.Manager()

Person.people.all()会返回包含所有Person对象的列表。

自定义管理器

继承基类Manager,在模型中实例化自定义Manager,可以在该模型中使用自定义的Manager。也可以添加额外的Manager方法,修改Manager返回的原始QuerySet。

添加额外的管理器方法

添加额外的Manager方法一般是为模型添加“表级”功能的更好方法。(行级功能通过模型方法)

自定义Manager方法能返回任何东西,没有强制必须返回一个QuerySet。

示例

  • 自定义Manager提供一个with_counts(),返回包含所有OpinionPoll对象的列表。并且每个对象都有一个额外属性num_response。
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 <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值