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就可以指定表名在这里插入图片描述

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'
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值