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