06-模型-模型成员

  1. 模型实例方法

    1. str:在将对象转换成字符串时会被调用
    2. save():将模型对象保存到数据表中.
    3. delete()将模型类对象从数据表中删除
  2. 模型类的属性

    1. 属性objects:管理器,是Manger类型的对象,用于与数据库进行交互.
    2. 当没有为模型类定义管理器时,Django会为模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects
    3. 为模型类BookInfo定义管理器books语法如下
      class BookInfo(models.Model):
      ...
      books = models.Manager()
      
  3. 管理器Manager

    1. 管理器是Django的模型进行数据库操作的接口,Django应用的每个模型都拥有至少一个管理器
    2. Django支持自定义管理器类,继承自models.Manager
    3. 自定义管理器类主要用于两种情况(所以一般情况是不用自定义的.嗯嗯.!)
      1. 修改原始查询集,重写get_queryset()方法
        ##图书管理器
        class BookInfoManager(models.Manager):
        def get_queryset(self):
            #默认查询未删除的图书信息
            #调用父类的成员语法为:super(子类型, self).成员
            return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
        
        1. 在模型类BookInfo中定义管理器
          class BookInfo(models.Model):
              ...
              books = BookInfoManager()
          
    2. 向管理器类中添加额外的方法,如创建对象(这里说到的名词是添加额外,所以**父类的方法就必须继承了**!!)
  1. 字段属性和选项(在对应的model里面的具体的类,比如class BookInfo(models.Model))

    1. 模型类属性命名限制:

      1. 不能是python的保留关键字
      2. 不允许使用连续的下划线,这是有django的查询方法决定的.
    2. 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
      属性=models.字段类型(选项)

    3. 字段类型

      1. AutoField 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
      2. BooleanField 布尔字段,值为True或False
      3. NullBooleanField 支持Null、True、False三种值
      4. CharField(max_length=字符长度) 字符串--参数max_length表示最大字符个数
      5. TextField 大文本字段,一般超过4000个字符时使用
      6. IntegerField 整数
      7. DecimalField(max_digits=None, decimal_places=None)
        1. 十进制浮点数
        2. 参数max_digits表示总位数
        3. 参数decimal_places表示小数位数
      8. FloatField 浮点数
      9. DateField[auto_now=False, auto_now_add=False]) 日期
        1. 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
        2. 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
        3. 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
      10. TimeField:时间,参数同DateField
      11. DateTimeField 日期时间,参数同DateField
      12. FileField:上传文件字段
      13. ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片
    4. 选项

      1. null:如果为True,表示允许为空,默认值是False
      2. blank:如果为True,则该字段允许为空白,默认值是False
      3. 对比:null是数据库范畴的概念,blank是表单验证证范畴的
      4. db_column:字段的名称,如果未指定,则使用属性的名称
      5. db_index:若值为True, 则在表中会为此字段创建索引,默认值是False
      6. default:默认值
      7. primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
      8. unique:如果为True, 这个字段在表中必须有唯一值,默认值是False
    5. 关系字段类型

      1. 关系型数据库的关系包括三种类型:
        1. ForeignKey:一对多,将字段定义在多的一端中
        2. ManyToManyField:多对多,将字段定义在两端中
        3. OneToOneField:一对一,将字段定义在任意一端中
      2. 可以维护递归的关联关系,使用'self'指定,详见“自关联”
      3. 由一到多的访问语法:
        #对象.模型类小写_set
        #例:
        bookinfo.heroinfo_set
        
      4. 由一到一的访问语法
        #对象.模型类小写
        #例:
        heroinfo.bookinfo
        
      5. 访问关联对象的id语法
        # 对象.属性_id
        #例:
        heroinfo.book_id
        
    6. 元选项

      1. 数据表的默认名称为
        #_
        #例:
        booktest_bookinfo
        
        在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字
  2. 在models.py底下,如果想在一些派生类里面自定义数据表名的话,可以

    1. 重新定义class Meta:
      db_table = 'bookinfo'
    2. 测试过后,
      1. 发现原来如果是使用自带的ORM创建的数据表的名字应该是app_+这个派生类的名字
        1. 例如 booktest_bookinfo
        2. 现在就变成了 bookinfo

你可能感兴趣的:(06-模型-模型成员)