14 管理器

BookInfo.object.all()  objects是个什么东东呢?

objects是Django自动生成的一个管理器对象,通过它实现对数据对查询,Django给每一个模型类都生成了一个管理器对象(objects)。

它是models.Manger类的一个对象,自定义管理器后,Django不再帮我们生成默认的objects管理器

 

 

本来bookapp项目中,BookInfo类生成的表名为:bookapp_bookinfo,我们可以在模型中定义一个元类(Meta),在Meta中定义一个类属性:db_table就可以指定一个自定义的表名。这样做的好处是表名不依赖于应用的名字,比如即使以后更改类应用的名字(bookapp),数据表也不会受影响。

class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub = models.DateField()
    bread = models.IntegerField(default=0)
    bcomment = models.IntegerField(default=0)
    isDelete = models.BooleanField(default=False)

    def __str__(self):
        return self.btitle

    class Meta:
        db_table = 'bookinfo'

 

 

自定义模型管理器类:

在models.py中,自定义一个模型管理器类:

 

from django.db import models

class BookManager(models.Manager):
    '''图书模型管理器类'''
    #重写all方法,只返回is_del=0的数据
    def all(self):
        # 1、调用父类的all方法,获取所有数据
        books = super().all()
        # 2、对数据进行过滤
        books = books.filter(isDelete=False)
        # 3、返回数据
        return books

    def create_book(self,btitle,bpub):
        # 1、创建一个图书对象
        # 2、获取self所在的类模型
        model_class = self.model
        book = model_class()
        book.btitle = btitle
        book.bpub = bpub
        book.save()
        return book

# Create your models here.
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub = models.DateField()
    bread = models.IntegerField(default=0)
    bcomment = models.IntegerField(default=0)
    isDelete = models.BooleanField(default=False)

    def __str__(self):
        return self.btitle

    class Meta:
        db_table = 'bookinfo'
    #自定义一个BookManager类的对象
    objects = BookManager()

 

 

 

 

 

 

posted @ 2019-08-06 21:52  greenfan  阅读(101)  评论(0)    收藏  举报