django 模型
是数据库中表
的映射,也叫对象关系映射(Object Relational Mapping
,简称ORM
)。
一、创建模型
每个模型都是一个 Python 的类,这些类继承
django.db.models.Model
模型类的每个属性都相当于一个数据库的字段。
example 1. 创建模型示例
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
first_name
和 last_name
是模型的 字段
。每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。
说明:
上面的模型会在数据库中
映射
一张表,表名为
,这说明我们可以在不同的_person app
中创建相同名称
的模型,django
创建表时会根据app
进行区分。虽然我们的
模型
中只有两个字段,但是在数据库表中会自动生成三个字段,django
会自动添加一个(自动递增的
) id 字段
二、使用模型
当我们创建完模型后,直接在数据库中是查找不到对应的表的,还需要进行一定的配置和操作。
1. 配置数据库
在项目的配置文件settings.py
中,具有以下设置:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
这个是django
的默认配置,使用sqlite3
数据库,除此之外我们还可以使用mysql
、oracle
等数据库,这里使用默认配置。
2. 设置INSTALLED_APPS
在我们的项目中可能包含很多的app
,如果我们要使用app
的模型model
,则需要将app
添加进settings.py
的INSTALLED_APPS
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'my_app', # 新添加的 `app` 名称
]
3. 使用python manage.py makemigrations
生成迁移文件
注意:如果有以下提示,说明你执行命令所在路径不对,应该进入项目目录下,与manage.py
同一级
can't open file 'manage.py': [Errno 2] No such file or directory
正确执行该命令,则有以下提示:
Migrations for 'my_app':
my_app/migrations/0001_initial.py
- Create model Person
该命令在my_app
的migrations
目录下生成了0001_initial.py
文件,点开查看:
……
operations = [
migrations.CreateModel(
name='Person',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=30)),
('last_name', models.CharField(max_length=30)),
],
),
]
该文件还没有完全转换为sql
语句,但也可以看出表中有三个字段
,分别为id
,first_name
,last_name
.
注意:使用python manage.py makemigrations
是对所有的app
进行检查,是否有app
的model
新增 / 更改。如果我们在同时开发多个app
,且自己只负责某 一个 / 几个
,则应该指定app
名称
python manage.py makemigrations my_app
4. 使用python manage.py migrate
生成 / 更改数据表
使用python manage.py migrate
可以将模型model
内容真正映射到数据库中。
同样的,如果我们只想对具体的app
起作用。
python manage.py migrate my_app
三、模型中的字段
模型中的字段与数据库表中的字段具有映射
关系,我们上述使用的CharField
会在数据库中创建varchar
类型字段。
django
常用内置模型字段
-
AutoField
自动增长的整数型,一般用于id
主键 -
BooleanField
布尔类型,可以是True
、False
-
NullBooleanField
可以存储布尔值数据,也可以存储空null数据 -
CharField
字符串类型 -
TextField
:存储文章内容信息数据,存储比较长的文本信息 -
DateField
日期类型 -
DateTimeField
日期-时间类型 -
DurationField
时间段 类型,对应python
的datetime.timedelta
类型 -
EmailField
存储电子邮件格式的数据,继承了CharField
,Django Admin
以及ModelForm
中提供验证机制 -
IntegerField
存储整型数据 -
GenericIPAddressField
存储IP地址信息数据 -
PositiveIntegerField
存储正整数数据 -
TimeField
存储时间信息,对应python 的datetime.time
-
URLField
:存储URL网址信息,Django Admin
以及ModelForm
中提供验证url -
IPAddressField
Django Admin
以及ModelForm
中提供验证IPV4机制