-
模型实例方法
- str:在将对象转换成字符串时会被调用
- save():将模型对象保存到数据表中.
- delete()将模型类对象从数据表中删除
-
模型类的属性
- 属性objects:管理器,是Manger类型的对象,用于与数据库进行交互.
- 当没有为模型类定义管理器时,Django会为模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects
- 为模型类BookInfo定义管理器books语法如下
class BookInfo(models.Model): ... books = models.Manager()
-
管理器Manager
- 管理器是Django的模型进行数据库操作的接口,Django应用的每个模型都拥有至少一个管理器
- Django支持自定义管理器类,继承自models.Manager
- 自定义管理器类主要用于两种情况(所以一般情况是不用自定义的.嗯嗯.!)
- 修改原始查询集,重写get_queryset()方法
##图书管理器 class BookInfoManager(models.Manager): def get_queryset(self): #默认查询未删除的图书信息 #调用父类的成员语法为:super(子类型, self).成员 return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
- 在模型类BookInfo中定义管理器
class BookInfo(models.Model): ... books = BookInfoManager()
- 修改原始查询集,重写get_queryset()方法
2. 向管理器类中添加额外的方法,如创建对象(这里说到的名词是添加额外,所以**父类的方法就必须继承了**!!)
-
字段属性和选项(在对应的model里面的具体的类,比如class BookInfo(models.Model))
-
模型类属性命名限制:
- 不能是python的保留关键字
- 不允许使用连续的下划线,这是有django的查询方法决定的.
定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性=models.字段类型(选项)-
字段类型
- AutoField 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
- BooleanField 布尔字段,值为True或False
- NullBooleanField 支持Null、True、False三种值
- CharField(max_length=字符长度) 字符串--参数max_length表示最大字符个数
- TextField 大文本字段,一般超过4000个字符时使用
- IntegerField 整数
- DecimalField(max_digits=None, decimal_places=None)
- 十进制浮点数
- 参数max_digits表示总位数
- 参数decimal_places表示小数位数
- FloatField 浮点数
- DateField[auto_now=False, auto_now_add=False]) 日期
- 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
- 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
- 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
- TimeField:时间,参数同DateField
- DateTimeField 日期时间,参数同DateField
- FileField:上传文件字段
- ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片
-
选项
- null:如果为True,表示允许为空,默认值是False
- blank:如果为True,则该字段允许为空白,默认值是False
- 对比:null是数据库范畴的概念,blank是表单验证证范畴的
- db_column:字段的名称,如果未指定,则使用属性的名称
- db_index:若值为True, 则在表中会为此字段创建索引,默认值是False
- default:默认值
- primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
- unique:如果为True, 这个字段在表中必须有唯一值,默认值是False
-
关系字段类型
- 关系型数据库的关系包括三种类型:
- ForeignKey:一对多,将字段定义在多的一端中
- ManyToManyField:多对多,将字段定义在两端中
- OneToOneField:一对一,将字段定义在任意一端中
- 可以维护递归的关联关系,使用'self'指定,详见“自关联”
- 由一到多的访问语法:
#对象.模型类小写_set #例: bookinfo.heroinfo_set
- 由一到一的访问语法
#对象.模型类小写 #例: heroinfo.bookinfo
- 访问关联对象的id语法
# 对象.属性_id #例: heroinfo.book_id
- 关系型数据库的关系包括三种类型:
-
元选项
- 数据表的默认名称为
在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字#<app_name>_<model_name> #例: booktest_bookinfo
- 数据表的默认名称为
-
-
在models.py底下,如果想在一些派生类里面自定义数据表名的话,可以
- 重新定义class Meta:
db_table = 'bookinfo' - 测试过后,
- 发现原来如果是使用自带的ORM创建的数据表的名字应该是app_+这个派生类的名字
- 例如 booktest_bookinfo
- 现在就变成了 bookinfo
- 发现原来如果是使用自带的ORM创建的数据表的名字应该是app_+这个派生类的名字
- 重新定义class Meta: