前面介绍了django的一些模板和视图的基本内容,现在来介绍一下后台的Model.这里创建工程和创建应用不再多说了.我们直接介绍Model.在介绍Model之前首先我们确保python和你使用的数据库之间是关联起来的.即如果你用的是mysql则要安装mysql模块.(如果是sqllite则不需要管这些了,因为python内置了sqllite)这里我使用mysql来做练习.在安装数据库绑定模块的时候要注意版本问题,我这里使用的是python3.4 Django1.8的版本所以我用的mysql模块是mysqlclient-1.3.6,该模块支持python3.0及更高,但不支持python3.2.所以在如果你选用的是其它的数据库,也在这个模块安装的地方也需要注意.更多详情参考:数据库模块安装
首先我们在项目中创建一个应用.应用名为polls.之后把该应用加入settings.py中的INSTALLED_APPS中,表示告诉django有这个应用的存在.我们可以看到这个polls的结构如下:
我们打开models.py文件,该文件用来存放后台的模型.即ORM.在此文件中我们创建两个类.Question and Choice.Question中有一个问题和一个发布日期,Choice中有两个字段一个是选择的text和votes.每个choice都关联一个问题.
from django.db import models
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)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
1.每个model都是django.db.models.Model的子类.
2.每个model中的属性就是对应着每张表中的字段.
3.每个model中的属性都是Field的实例.例如CharField DateTimeField 这写东西将告诉数据库用该字段用什么类型.
4.每个Field中都可以设置参数选项.我们可以给该字段设置一个人类可读的名字,例如pub_date中的'date published'.还可以设置字段的长度,默认值,等等.
5.可以设置表之间的关系定义,入Choice中的question就是Question中的外键关系.Django支持多对一,一对一,多对多的关系.
下面我们来激活这写Model.
我们输入下面的命令:
python manage.py makemigrations polls
该命令指定需要制作的迁移应用为polls,当运行完该命令之后,你会在项目中的polls/migrations文件夹下发现多处一个py文件,以及控制台上会输出一些相关信息:
该文件相当于sql文件,但不是sql文件,可以说这是一个django使用的sql文件,我们的建表信息,包括之后的更改信息,都将记录在其中,(如果是后面对model类中的属性有修改,例如改变字段名)则将会单独在其目录下生成一个新的文件.
我们可以使用sqlmigrate查看改文件对应的sql语句信息:使用如下命令:
python manage.py sqlmigrate polls 0001
指定应用polls 并且指定需要查看哪个migrations文件夹下的文件,makemigrations生成的文件会在文件名开通产生一个编号,我们只需要去指定这个编号就可以用该命令来查看该文件的对应sql语句了.下图为对应的产生的sql信息:
当然如果你不关心这些,也大可不必去看.直接把文件映射成数据库表就行了.使用migrate命令:
python manage.py migrate
控制台会输出如下类似信息:
这时候在去你的数据库查看 就会看到生成的表了.
简单总结一下:migrates命令是强大的,当你改变你的model时候,发布你的项目,你不需要去手动的删除数据库或者表,你只需要运行一次该命令就可以自动更新你的数据库了.这简直太方便了.你只需要记住如下两步: