Django 模型
** 软件环境:** windows7+Python2.7.9+Django1.8.2
一、定义模型
1. 创建 APP
Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个 TestModel 的 app:
python manage.py startapp TestModel
2. 定义Model
我们修改 TestModel/models.py文件,代码如下:
# models.py
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
以上的类名代表了数据库名称,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
3. 配置APP
接下来在settings.py中找到INSTALLED_APPS这一项,如下:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 添加此项
4. 创建数据表
-
** 数据表同步命令(Django < 1.7) **
python manage.py syncdb
-
** 数据表同步命令 (Django >= 1.7) **
python manage.py makemigrations
python manage.py migrate
看到几行"Creating table…"的字样,你的数据表就创建好了。
Creating tables ...
……
Creating table TestModel_test #我们自定义的表
……
表名组成结构为:app名_类名(如:TestModel_test)。
** 注意:**尽管我们没有在models给表设置主键,但是Django会自动添加一个id作为主键。
二、数据库操作
1. 修改urls.py
接下来我们在 HelloWorld/HelloWorld 目录中修改urls.py:
from django.conf.urls import *
from HelloWorld.view import hello
from HelloWorld.testdb import testdb
urlpatterns = patterns("",
('^hello/$', hello),
('^testdb/$', testdb),
)
2. 添加数据
HelloWorld/HelloWorld目录中添加 testdb.py 文件。
添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
test1 = Test(name='w3cschool.cc')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
访问http://localhost:8000/testdb/就可以看到数据添加成功的提示。
三、问题解决思路
1. No module named mysqldb
在命令行中运行
python manage.py syncdb
出现以下错误
- No module named mysqldb
解决方法参考django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
2. without Migrations
python manage.py syncdb
出现下面内容
输入网址http://localhost:8000/testdb/ ,显示错误页面
testdb02.png表明数据库中的testmodel_test表没有创建成功。
3. 查找Django Documentation - Models
执行如下命令 (Django >= 1.7)
python manage.py makemigrations
python manage.py migrate