在django中, 所有的数据库操作都是面向对象编程,基本上看不到操作数据库的sql语句,方便快捷是django开发的一大特点
定义属性
- 定义属性需要字段类型
- 字段类型被定义在django.db.models.fields目录下,为了方便使用,被导入到django.db.models中
- 使用方式:
1.导入 from django.db import models
2.通过models.Field创建字段类型的对象,赋值给属性
字段类型
- AutoFiled :根据实际id自动增长的字段类型。如果不指定该类型,则自动添加一个主键字段到模型类中
- BooleanFiled:类似于c/c++等其他语言中的bool类型,只能为true或false
- NullBooleanFiled:它可以有三个取值, null、true、false
- CharField:字符串
- TextField :大文本字段,一般超过4000行
- IntegerFiled:整数字段
- DecimalFiled(max_digits=None,decimal_place=None)
max_digits:位数总数
decimal_place:小数点后面的位数 - FloatField:python实例表示的浮点数
- DateFiled(auto_now = false, auto_now_add = false):使用python中的datetime.date实例表示的日期
auto_now:默认为false, 每次保存对象时, 自动设置该字段为当前时间。用于最后一次修改的“时间戳”
auto_now_add:当对象第一次被创建时自动设置当前时间,用于创建时间戳,它总是使用当前时间,默认为false
auto_now、auto_now_add 和默认值之间是互斥的,它们之间任意组合将发生错误 - TimeField:使用python的datetime.time实例表示的时间,参数同DateFiled
- DateTimeField:使用python的datetime。datetime实例表示的时间,参数同DateFiled
- FileFiled:上传文件的字段
- ImageFiled:继承了FileFiled的所有属性和方法, 但对上传的文件进行校验,确保它是个有效的image文件
字段选项
- 通过字段选项可以实现对字段的约束
- 在字段对象中通过关键字参数指定
- null:如果为true, django将控制以null存储到数据库中,默认为false(null是数据库的概念)
- blank:如果为true, 表示该字段允许为空白,默认为false(blank是表单验证范畴)
- db_column:字段的名称 ,如果未指定,则使用属性的名称
- db_index:如果为true, 则在表中会为该字段常见索引
- default:默认值
- primary_key:如果为true, 则该字段为成为该表的主键
- unique:如果为true, 则该字段在表中必须有唯一值
关系
- 关系的类型包括:
ForeignKey: 外键, 一对多, 将字段定义在多的那一边
ManyToManyField:多对多,将字段定义在两端中
OneToOneField:一对一,将字段定义在任意一端中 - 用一访问多:
bookinfo.heroinfo_set - 用一访问一:
heroinfo.bookinfo - 访问id:对象.属性_id
heroinfo.bok_id - 示例
class BookInfo(models.Model):
htitle = models.CharFiled(max_length = 20)
bread = models. IntegerFiled()
isDelete = models.BooleanField()
class HeroInfo(mdels.Model):
hname = models.CharField(max_length = 20)
hgender = models.BooleanField()
isDelete = models.BooleanField()
book = models.ForeignKey('BookInfo')
元选项
- 在模型类中定义Meat,用于定义元信息
- 元信息db_table, 用于定义数据表的默认名称, 推荐使用小写字母, 数据表的默认名称
<app_name><model_name> - ordering: 对象的默认排序选字段
class Man(models.Model):
class Meta:
ordering = ['id']
- 字符串前面加-表倒叙
class BookInfo(models.Model):
class Meta:
ordering = ['-id']