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()來將自定義的模型方法引入。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM