10-Django模型管理器对象

管理器

BookInfo.objects.all()的这个objects是Django自动生成的管理器对象,通过这个管理器可以实现对数据的查询


from django.db import models


# Create your models here.

class BookInfoManger(models.Model):
    # 模型管理器类
    def all(self):# 改变查询结果的结果集
        books = super().all()
        books = books.fliter(isDelete=False)
        return books
        # 调用父类的all方法获取所有数据,对数据进行过滤,返回books

    # 操作模型类对应的数据表(增删改查)
    def create_book(self,btitle,bpub_date):
        # book=BookInfo()这样写一缺点就是下面的BookInfo类名改变之后就会出错,
        #应该下面这样
        model_class = self.model  # 获取self所在的模型类
        book = model_class
        book.btitle=btitle
        book.bpub_date=bpub_date
        book.save()
        return book


# 一类
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)  # 图书名称
    bpub_date = models.DateField()  # 出版日期
    bread = models.IntegerField(default=0)  # 阅读量,默认为0
    bcomment = models.IntegerField(default=0)  # 评论量
    isDlete = models.BooleanField(default=False)  # 逻辑删除,默认不删除
    book = models.Manager()  # 自定义一个Manager对象

    # 自定义一个BookinfoManger类的对象,这是关联起模型类和模型管理器类的一句代码
    objects = BookInfoManger()

    # 封装一个类方法,可以直接用类名.调用,但是模型类一般只用来表示数据库的表,不用来写这些方法,于是把这些东西
    # 放到模型管理器类
    # @classmethod
    # def craete_book(cls,btitle,bpub_date):
    #     obj=cls()
    #     obj.btitle=btitle
    #     obj.bpub_date=bpub_date
    #     obj.save()
    #     return obj


模型类和模型管理器类之间的关系

模型类代码中加上objects = BookInfoManger()实例化模型管理器类的对象
在模型管理器类中可以改变或者增加models.Model的方法。

元选项指定表名

Django默认生成表名:
应用名_模型类名小写

元选项:
需要在模型类中定义一个元类Meta,在里面定义一个类属性db_table就可以指定表名10-Django模型管理器对象

class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)  # 图书名称
    bpub_date = models.DateField()  # 出版日期
    bread = models.IntegerField(default=0)  # 阅读量,默认为0
    bcomment = models.IntegerField(default=0)  # 评论量
    isDlete = models.BooleanField(default=False)  # 逻辑删除,默认不删除
    book = models.Manager()  # 自定义一个Manager对象

    # 自定义一个BookinfoManger类的对象,这是关联起模型类和模型管理器类的一句代码
    objects = BookInfoManger()

    # 封装一个类方法,可以直接用类名.调用,但是模型类一般只用来表示数据库的表,不用来写这些方法,于是把这些东西
    # 放到模型管理器类
    # @classmethod
    # def craete_book(cls,btitle,bpub_date):
    #     obj=cls()
    #     obj.btitle=btitle
    #     obj.bpub_date=bpub_date
    #     obj.save()
    #     return obj
    class Meta:
        db_table='bookinfo'