Django模型(Models)(1、字段及属性)

简介 【Django模型(Models)(1、字段及属性)】模型是一个用于表示数据的Python类,包含基本的数据字段和行为,在Django中,通常一个模型就代表一个数据库表。
模型集成自django.db.models.Model,模型的每一个属性代表一个数据表的列。
举例介绍

  1. 在models.py文件中创建一个Person模型:
from django.db import modelsclass Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField(default=0, db_column='age')

模型Persons包括两个字段:name和age,这两个字段都是模型的类属性,分别对应数据库表中的两个列。
  1. 当执行 makemigrations 后,Django会自动生成模型的数据库迁移文件,在 ${appName}/migrations/ 文件夹下:
from django.db import migrations, modelsclass Migration(migrations.Migration):initial = Truedependencies = [ ]operations = [ migrations.CreateModel( name='Person', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=30)), ('age', models.IntegerField(db_column='age', default=0)), ], ), ]

Django会自动添加主键id
  1. 当执行 migrate 命令后,Django根据跟模型名一致的数据了标明,命名规则:应用程序名_模型名
字段类型 模型字段是模型的类的属性,它的命名不能和模型接口相同,如不能使用clean、save等字段,同时,字段名字中不能出现连续的两个下划线,因为联系两个下划线是Django数据库API的特殊语法。
为了支持不同的数据库,Django提供了十几种字段类型:
序号 字段 说明 备注
1 AutoField IntegerField的改进形式,字段根据已有的ID自动增长,一般用于主键。 Django会自动创建
2 BigAutoField 与AutoField相似,取值范围为1~9223372036854775807
3 BooleanField 字段值只包含True和False
4 CharField 字符串类型 必要字段:max_length:表示能接受的最大字符数
5 DateField 日期类型 可选字段:auto_now:每当保存数据时,都会将该字段更新为当前时间;auto_now_add:该行数据第一次保存时才会保存当前时间;
6 DateTimeField 时间类型 与DateField一样,包含两个额外参数auto_now和auto_now_add
7 DecimalField 指定小数位数的数值类型 对应Python的Decimal类型;包含两个必要参数:max_digits:数值的总位数;decimal_places:小数点后位数
8 EmailField 本质是CharField,并会校验输入字符串是否是一个有效的邮件地址
9 FileField 文件上传控件 该字段不允许使用primary_key属性,包含两个可选参数;upload_to:文件上传后的保存位置;storage:负责文件存储的Python类;
10 FilePathField 文件列表显示字段 必选字段:path:文件路径;可选参数:match:正则表达式,只能过滤文件名,不能过滤路径;recursive:True或False,当为True时,FilePathField.path的子文件夹中符合条件的文件也会显示在下拉列表中,默认为True;allow_files:True或False。
11 FloatField 浮点数类型
12 ImageField 包含FileField字段的所有属性和方法,但是仅允许上传图片类型文件。 额外属性:height_field:图片高度;width_field,图片宽度;
13 IntegerField 整数字段,取值范围:-214783648~ 214783647 对于所有Django支持的数据库来说是安全的。
14 PositiveIntegerField 正整数类型,取值范围:0~214783647
15 PositiveSmallIntegerField 小正整数类型,取值范围:0~32767
16 SmallIntegerField 小整数类型,取值范围:-32768~32767
17 SlugField Slug是用于新闻业的专业名词,slug是一个简短的文本,只允许包含字母,数字,下划线和连字符
18 TextField 超长文本类型
19 TimeField 时间类型,对应datatime.time
20 URLField CharField类型,只能接受URL字符串 默认最大长度是200字符
字段通用属性 每一个字段都需要一系列的属性,如使用CharField时,必须给出max_length属性,除了以上特殊字段属性外,Django还为所有字段提供了一系列通用属性,这些属性都是可选的:
序号 属性 说明 备注
1 null 默认值True,此时保存模型时, Django在数据库的对应字段中保存空。 对于文本型字段,尽可能不使用null属性,因为当使用默认null时,数据库中就可能现两种空数据:NULL和空字符,而Django默认使用字符串。
2 blank 默认值为False,当设置Field.blank=True时,字段值允许为空。
3 choices 属性值为一个可迭代对象,如列表或者元组,迭代对象的每个成员包括两个字符串。当字段设置了 choices属性时,字段在网页中将会以下拉列表的形式显示。
4 default 设置默认字段。可以是字符串或者方法,但不可以是可变对象
5 help_text HTML元素提示文本,在文本中可以使用HTML标记。
6 primary_key 将字段设置为数据表主键。如果模型中任何字段都不包含 primary_key=True属性,Django将会自动为模型添加一个 IntegerField字段作为主键。 主键永远是只读的,当修改一个模型对象的主键后,如果保存将会在数据库中创建一个新对象。
7 unique 当字段的unique属性设置为True时,该字段的所有值在整张数据表中不能重复,每一行数据都必须有唯一的字段值。
8 verbose_name 字段说明。 ForeignKey、ManyToManyField、OneToOneField三种字段类型要求第一个参数必须是模型类,因此必须使用verbose_name关键字。除此以外其他字段类型都包含一个默认的verbose_name属性,可以直接在字段属性列表的第一位输入文本作为verbose_name属性值。如果没有给出 verbose_name属性,Django会使用字段名作为verbose_name值,如果字段名中包含下画线时,下画线会被转换为空格。

    推荐阅读