管理器是 Django 的模型进行数据库的查询操作的接口 ,用于与数据库进行交互,Django 应用的每个模型都拥有至少一个管理器
当定义模型类时没有指定管理器,则 Django 会为模型类提供一个名为 objects 的管理器
显式定义管理器
自定义管理器类主要用于两种情况
情况一:向管理器类中添加额外的方法:
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateTimeField()
# 装饰器类方法
# 重写类的创建方法
@classmethod
def create(cls,title,pub_date):
book = cls(btitle=title,bpub_date=pub_date)
return book
def __str__(self):
return "%d--%s--%s" % (self.pk, self.btitle, self.bpub_date)
# 改变排序顺序
class Meta():
ordering = ['-id']
books = BookInfoManger() # 实例化管理器类
情况二:修改管理器返回的原始查询集:重写 get_queryset()方法
class BookInfoManger(models.Manager):
def get_queryset(self): # 重写这两个方法
return super(BookInfoManger, self).get_queryset().filter()
def create_book(self,title,pub_date):
book = self.model()
book.btitle = title
book.bpub_date = pub_date
return book