• Django框架文件解析--models.py


    models
    
    from django.db import models
    
    
    '''
    从django.db中导入 models 模型,
    意味着, 可以直接在应用中的models这个当前文件中设计
    该应用在数据库中的模型.
    
    每一个models在数据库内对应一个数据库
    每一个类,对应一个表
    类中的函数, 则影响表中的数据个数以及类型.
    
    设计模型的时候, 直接在models里面书写类即可
    所有的模型都需要继承django.db中的models中的Model类,注意大写开头.Model是models的一个类.
    
    '''
    
    # Create your models here.
    
    '''
        在使用manage的shell功能的时候, 
        想要在shell中通过模型类操作数据库中的数据.
        首先就要导入该 应用的modes中的具体的哪个模型类.
        然后使用模型类定义实例对象, 最后通过实例对象操作.
        
        可以对实例对象中, 模型类中的具体属性, 进行赋值 操作.
        操作之后, 需要使用实例对象的.save()方法, 保存入数据库, 才能使之生效.
        
        只有实例对象的能够通过save方法保存数据.
        如果通过 
        变量 = BookInfo.objects.get(id=1) 
        获取的就是实例对象, 但是无法直接通过save()保存, 
        因为获取的id也同样,和之前的实例对象的id相同
        改变id后,可以save().
        
        !!!!之后的存储项目,不会自动跳过该id,导致多个id共存. 
        之后读取id的时候,是后添加的数据
        
    >>> from booktest.models import BookInfo
    >>> 
    '''
    
    # 自定义manager模块一般有两个用处, 1修改选择集. 2增加自定义模块简化操作.
    class BookInfoManager(models.Manager):
        '''图书模型管理类'''
    
    
        # 1修改已有选择集, 完成对isDelete的筛选.
        def all(self):
    
            books = super().all()
            books = books.filter(is_delete=False)
            return books
    
        # 2创建新的方法, 简化objects操作.
    
        def create_book(self,btitle,bpublish):
    
            # 1. 创建图书对象
    
            # 为了避免BookInfo改变类名, 从而导致自定义方法无法索引,
            # 此处使用self.model同样可以索引到引用此Manager方法的模型类.
            # 这样, 不管元类如何改变, 方法名称都不用发生变化.
            model_class = self.model
    
            # book = BookInfo()
    
            book = model_class()
    
    
            # 2. 为图书对象赋值
            book.btitle = btitle
            book.bpublish = bpublish
    
            # 3. 保存数据
            book.save()
    
            # 4. 返回对象
            return book
    
    
    
    
    
    
    # 单类
    class BookInfo(models.Model):
    
        btitle = models.CharField(max_length = 20)
        # models类中, 不止有创建模型的Model函数, 还有模型需要使用的各种数据.
        bpublish = models.DateField()
    
        # 关联自定义的Manager
        objects = BookInfoManager()
        # 自定义manager之后,一定要在模型类模块内关联. 否则无法产生联系.
    
    
        # 在模型类内部完成新建函数的写法, 但一般写在模型类外部.
            # 1.定义类方法.
            # 2.需要继承cls类本身
    
    
        # @classmethod
        # def create_book(cls,btitle,bpublish):
        #     obj = cls()
        #     obj.btitle = btitle
        #     obj.bpublish = bpublish
        #     obj.save()
        #
        #     return obj
    
        # 为防止应用名称发生变化, 则应该定义元类Meta制定数据库表名.
    
        class Meta:
            db_table = "booktest"
            # 指定模型类对应的表名之后,
            # 不管应用名称如何发声变化,
            # 都能关联到该数据表.
    
    
    
    
    
    # 多类
    class HeroInfo(models.Model):
        # 姓名
        hname = models.CharField(max_length = 20)
    
        # 性别  boolean 就是布尔类型
        # hgender = models.BooleanField(defalut = False)  拼写错误
        hgender = models.BooleanField(default = False)
    
        # 备注  武功
        hcomment = models.CharField(max_length = 128)
    
        hbook = models.ForeignKey('BookInfo')
        # 关系属性中, 建立和BookInfo的关系.图书和英雄一对多的关系(外键).
    
        '''
        关系属性
        
        在一对多的关系数据表的时候对应关系的时候,
        对应关系需要通过(多)来填写关联关系.
        '''
    
    
    
    
    '''
        所关联的表, 也是一个单独的object对象, 
        在使用hero对象调用关联对象的时候, 直接可以后缀,相关联对象的属性.
        例如:
            >>> h3.hname
            '段誉'
            >>> h3.hbook
            <BookInfo: BookInfo object>
            >>> h3.hbook.btitle
            '天龙八部'
    
    
    '''
  • 相关阅读:
    努力的意义是什么?
    那些成功学和鸡汤文没有告诉你的
    曾国藩:一勤天下无难事
    王健林台大演讲:谁没有艰辛的过往?
    什么样的能量才能支撑一个人走过人生的低谷和迷茫
    想成为大树,就不要和草去比
    马云:不吃苦,你要青春干嘛?
    微博运营要点
    numba学习教程
    机器学习的分类
  • 原文地址:https://www.cnblogs.com/jrri/p/11492061.html
Copyright © 2020-2023  润新知