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