Django学习第三部分(从创建模型到启用)
数据库的设置
设立数据库并创建初版模型。
由于这是一个测试应用程序,我们将使用SQLite3。
以下将保持默认状态:数据库、时区、安装应用程序。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
TIME_ZONE = 'UTC'
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
这些应用程序需要至少一个数据库表,因此在开始使用之前需要在数据库中创建表格。
确认设置后,返回一个目录并创建所需的数据库表。
$ python manage.py migrate
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
确认迁移工作已成功完成。
创建模型
接下来,我们将定义一个模型。
模型是指数据库的布局以及相关的元数据。
在即将开发的简单投票应用程序中,我们将创建两个模型,分别是“问题”和“选择”。
我們將編輯polls/models.py如下所示。
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
启用模型
只需要按照上述提到的一小段代码,就可以创建应用程序的数据库模式(CREATE TABLE语句)。
此外,还可以创建用于从Python访问Question和Choice对象的数据库API。
但是,在此之前,您需要告诉项目中安装了Polls应用程序。
要将应用程序包含在项目中, 需要将配置类的引用添加到INSTALLED_APPS设置中。
编辑 mysite/settings.py 文件,
在 INSTALLED_APPS 设置中添加一行对 polls/apps.py 中的 PollsConfig 的路径。
(别忘了在末尾加上逗号)
这样就会变成以下这样。
# Application definition
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
这样一来,Django 就能够识别 polls 应用程序的存在了。
我已经准备好了进行迁移了。
首先,执行makemigrations命令。这个命令可以在Django中保存模型的更改或创建新的模型时以迁移的形式存储。
$ python manage.py makemigrations polls
成功后将显示以下内容
Migrations for 'polls':
polls\migrations\0001_initial.py
- Create model Question
- Create model Choice
执行迁移命令,在数据库中创建模型的表格。
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
Applying polls.0001_initial... OK
这样一来,迁移就完成了。
使用Django的迁移功能时,
在更改模型时
无需删除并重新创建表。
可以直接升级模型,而不需要改变现有的数据。