zoukankan      html  css  js  c++  java
  • django中自定义了manager函数,使用的时候报错AttributeError: 'Manager' object has no attribute 'title_count'

    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()来将自定义的模型方法引入。

  • 相关阅读:
    塔防游戏 代码project as 分享
    iOS网络监控— BMReachability
    Oracle学习(五):多表查询
    Servlet之生命周期【入门版(刚開始学习的人必看)】
    mysql 流程函数 存储引擎 InnoDB简单特性
    js
    UVa 10245
    Ubuntu14.04怎样使用root登录
    leetCode(29):Happy Number
    WebService:asp.net类库中添加WebService引用出现问题解决方法
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/11383990.html
Copyright © 2011-2022 走看看