简介 【Django模型(Models)(1、字段及属性)】模型是一个用于表示数据的Python类,包含基本的数据字段和行为,在Django中,通常一个模型就代表一个数据库表。
模型集成自django.db.models.Model,模型的每一个属性代表一个数据表的列。
举例介绍
- 在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,这两个字段都是模型的类属性,分别对应数据库表中的两个列。
- 当执行 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
- 当执行 migrate 命令后,Django根据跟模型名一致的数据了标明,命名规则:应用程序名_模型名
为了支持不同的数据库,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字符 |
序号 | 属性 | 说明 | 备注 |
---|---|---|---|
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值,如果字段名中包含下画线时,下画线会被转换为空格。 |
推荐阅读
- Django|Python接口自动化测试系列[V1.0.0][加密接口]
- Django (一)-DRF(DjangoRESTframework)工程搭建
- Django中新版本变动和版本不同的各种坑 (持续更新)
- xadmin|ImportError: No module named 'reversion'
- 解决django1.11与Python3.7不兼容问题
- Django中的auto_now、auto_now_add
- python|web开发之Django(七)(注册、登录、会话以及跳转个人中心)
- django版本和python版本的对应
- django中如何修改网页title和站点header?
- 关于django2中views和url已经前端模板页面的关系