Django教程
- 关于media,static文件的动态使用和静态使用
- Django获取带参数url的参数值
- django配置404页面教程
- django模板常用的内置过滤器
- Jinja2配置自定义过滤器
- Django教程-定时任务crontab
- 解决uwsgi报错:No such process [core/uwsgi.c line 1693]
- 解决-doesn't declare an explicit app_label and isn't in an application in INSTALL
- Django教程-Model字段大全,选项详解
- Django教程-子应用添加后台管理
- Django教程-安装DjangoUeditor3
- Django教程-设置默认导包路径
- Django教程-Django配置redis
- Django教程-django配置mysql数据库
- Django教程-uwsgi配置详解
- Django model 字段类型大全
- Django ORM详解
- 解决:Django定时器无法启动
- Django教程-Django中配置jinja2模板
- Django教程-创建一个最简单的django项目
Django model 字段类型大全
属性名 = models.字段类型,定义属性时需要指定字段类型, 通过字段类型的参数指定选项
属性名(命名规则):
1,不允许使用python的保留关键字
2,不允许使用mysql的保留关键字
3,不允许使用连续的下划线,因为Django的查询语法就是连续的下划线
字段类型:
AutoField:自动增长的IntegerField, 不指定时Django会自动创建属性名为id的自动增长属性
BooleanField:布尔字段,值为True或False
NullBooleanField:支持Null、True、False三种值
CharField(max_length=20):字符串,参数max_length表示最大字符个数
TextFiled:大文本字段,一般超过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,对上传的内容进行校验,确保是有效的图片
2.字段选项:
null:如果为True,表示允许为空,默认值是False
blank:如果为True,则该字段允许为空白,默认值是False ,对比:null是数据库范畴的概念,blank是表单验证范畴的
db_column:字段的名称,如果未指定,则使用属性的名称(只限于数据库表中的名字,操作数据库还是类属性的名字)
db_index:若值为True, 则在表中会为此字段创建索引,默认值是False(为了优化查询速度 )
default:默认值,这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。
primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
unique:如果为True, 这个字段在表中必须有唯一值,这个值不能重复,默认值是False
关系型字段类型:关联表中使用
注意:Django会自动为表创建主键字段
如果使用选项设置某属性为主键字段后,Django不会再创建自动增长的主键字段
默认创建的主键字段为id,可以使用pk代替,pk全拼为primary key
class PeopleInfo(models.Model):
name = models.CharField(max_length=20) #人物姓名
gender = models.BooleanField(default=True) #人物性别
description = models.CharField(max_length=20) #人物描述
isDelete = models.BooleanField(default=False) #逻辑删除
book = models.ForeignKey(BookInfo) # 外键约束,人物属于哪本书
pub_date = models.DateField(null=True) #日期
readcount = models.IntegerField(default=0) #阅读量
commentcount = models.IntegerField(default=0) #评论量
isDelete = models.BooleanField(default=False) #逻辑删除
# 元类信息 : 修改表名
class Meta:
db_table = 'peopleinfo'
3.关系字段类型
关系型数据库的关系包括三种类型:
ForeignKey:一对多,将字段定义在多的一端中,
比如一本书可以有多个英雄,所以ForeignKey放再英雄模型里面模型里,如下图:
ManyToManyField:多对多,将字段定义在任意一端中
OneToOneField:一对一,将字段定义在任意一端中
可以维护递归的关联关系,使用self指定
4.元选项:
作用:修改数据库表的默认的名称
数据库表的默认名称为 :
应用名_模型名
例:Book应用中定义BookInfo模型类
Book_bookinfo
在模型类中定义元类Meta,用于设置元信息,使用db_table自定义表的名字
# 书籍信息模型
class BookInfo(models.Model):
name = models.CharField(max_length=20) #图书名称
class Meta: #元信息类
db_table = 'bookinfo' #自定义表的名字
最后修改:2021-07-01 00:48:03