Django Manager

https://docs.djangoproject.com/en/2.1/topics/db/managers/

默认情况下,Django 为所有的model 都添加一个名家objects 的 Manager,用于与数据库交互

1. 关于Manager 的名字

默认情况下,Django为model 添加的manager的名字为objects。你可以自己更改。例如:

from django.db import models

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

当进行如上修改后,则访问Person.objects就会触发AttributeError异常。正常的访问方式变成:Person.people.all()这种形式。

2.自定义Manager

当你想为你的manager 添加特别的方法而是修改Manager的默认行为时,你就需要去自定义Manager.

2.1 添加自定的方法

自定义的manager 方法可以返回任何东西,而不一定需要返回一个QuerySet。

例如,下面的例子中,在自定义的Manager 的with_counts中返回了一个OptionPoll对象列表。并在OptionPoll模型中使用了自定义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=ro
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值