zoukankan      html  css  js  c++  java
  • Django管理器和元选项

    一、管理器:

    应用场景:1.改变查询的结果集  2.添加额外的方法

     1 class BookInfoManger(models.Manager):
     2     """自定义图示模型管理类"""
     3     # 改变查询的结果集
     4     def all(self):
     5         # 1.调用父类的all方法,获取所有数据
     6         books = super().all()  # QuerySet
     7         # 2.对数据进行过滤
     8         books = books.filter(isDelete=False)
     9         # 3.返回数据
    10         return books
    11 
    12     # 封装函数,操作模型类对应的数据表(增删改查)
    13     def create_book(self, btitle, bpub_date):
    14         # 创建一个图书对象
    15         # book = BookInfo()
    16         model_class = self.model
    17         book = model_class()
    18         book.btitle = btitle
    19         book.bpub_date = bpub_date
    20         # 保存数据
    21         book.save()
    22         # 返回book
    23         return book
    24 
    25 
    26 class BookInfo(models.Model):
    27     """图书模型类"""
    28     # 图书名称
    29     btitle = models.CharField(max_length=20)
    30     # 出版日期
    31     bpub_date = models.DateField()
    32     # 阅读量
    33     bread = models.IntegerField(default=0)
    34     # 评论量
    35     bcomment = models.IntegerField(default=0)
    36     # 逻辑删除标记
    37     isDelete = models.BooleanField(default=False)
    38     # 自定义一个Manger类对象
    39     objects = BookInfoManger()

    二、元选项:

    应用场景:工作中表已经创建好,需要创建模型类来对应表或者需要修改项目APP名称,通过定义元类指定表名,可以让表名脱离app名称限制。

    定义好后重新生成迁移文件并执行迁移,表名就会更改。
    定义方法(在模型类中):
    class BookInfo(models.Model):
        """图书模型类"""
        。。。。。。
    
        class Meta:
            # 创建元类,指定表名,让表名脱离app名称限制
            db_table = 'bookinfo'
  • 相关阅读:
    chrome手动同步书签
    MySQL(5.6/5.7版本)卸载方法
    Windows 搭建IIS+PHP+MySQL环境
    按照innode删除结点
    wsl区分大小win10不区分大小写解决方案
    Docker容器里的centos疑难杂症
    [UGUI]源码调试和修改
    [UnityAPI]EditorWindow类 & Editor类
    [UnityAPI]Selection类
    [Lua]require
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12815536.html
Copyright © 2011-2022 走看看