首页 > 其他 > 详细

django中自定义了manager函数,使用的时候报错AttributeError: 'Manager' object has no attribute 'title_count'

时间:2019-08-20 17:36:17      阅读:325      评论:0      收藏:0      [点我收藏+]

models.py代码如下:

from django.db import models

# Create your models here.

# 增加额外的Manager方法
# 为Book模型定义一个title_count()方法,它需要一个关键字,返回包含这个关键字的书的数量
class BookManager(models.Manager):
    def title_count(self, keyword):
        return self.filter(title__icontains=keyword).count()


class Book(models.Model):
    title=models.CharField(max_length=100)
    authors=models.ManyToManyField(Author)
    publisher=models.ForeignKey(Publisher,on_delete=models.CASCADE)
    publication_date=models.DateField()
    # 添加一个num_pages字段
    # blank=True,null=True用于“设置可选字段”以及“添加非空列”
    # num_pages=models.IntegerField(blank=True,null=True)
    objects=BookManager()

    def __unicode__(self):
        return self.title

    def __str__(self):
        return self.title

其中BookManeger类继承了models.Manager类,用于进行自定义Manager方法。

通过以下命令来检测自定义的方法的可用性:

>>> from books.models import Book
>>> Book.objects.title_count(django)
2

输出结果表示方法能够正常运行。

但是在运行成功之前报错:AttributeError: ‘Manager‘ object has no attribute ‘title_count‘

发现错误的原因有两处:

(1)class BookManager(models.Manager):这里应该继承与models.Manager而不是models.Model

(2)在Book模型类中应该添加objects=BookManager()来将自定义的模型方法引入。

 

django中自定义了manager函数,使用的时候报错AttributeError: 'Manager' object has no attribute 'title_count'

原文:https://www.cnblogs.com/wyhluckdog/p/11383990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!