说明
目前的进度及后续的课程

(html comment removed: more)
介绍
在上节的内容中,填写的内容是无法保持的,所以本节会介绍ORM,使用其比直接操作数据库方便一点.
今天的具体内容如下:
- 给ORM的测试
- 定义Item
- 继承save属性
- 构造lists_item表
- 定义text属性
- 生成数据库字段
- 定义默认值
给ORM的测试
先写一个测试类,给ORM用
vi lists/tests.py

内容为保存两个item到数据库,再查询数据库中的所有,看是不是有两个
最后调出两个数据看和测试期望值是否匹配
定义Item
运行测试,报无法导入Item模块
ImportError: cannot import name 'Item'
去models.py里建立Item类
vi lists/models.py
from django.db import models
class Item(object):
pass
继承save属性
再测试发现没有save属性
first_item.save()
AttributeError: 'Item' object has no attribute 'save'
去models.py里建立Item类
vi lists/models.py
from django.db import models
class Item(models.Model):
pass
从Model类继承相关属性
构造lists_item表
再次测试,报没有表 lists_item
django.db.utils.OperationalError: no such table: lists_item
开始建造结构
python manage.py makemigrations
# 查看生成的文件
ls lists/migrations
0001_initial.py __init__.py __pycache__
定义text属性
再次测试,报没有text属性
AttributeError: 'Item' object has no attribute 'text'
于是写入text的定义
vi lists/models.py
class Item(models.Model):
text = models.TextField()
生成数据库字段
再次测试,报没有lists_item.text行
django.db.utils.OperationalError: no such column: lists_item.text
这是因为之前都是对数据库的设计,其实还没有定入数据库
python manage.py makemigrations
这时运行数据库,会有提示没有默认值,这时选择2退出去字段的默认值
定义默认值
vi lists/models.py
class Item(models.Model):
text = models.TextField(default='')
再次迁移并运行测试,测试成功
python manage.py makemigrations
python manage.py test lists
预告
今天的内容,繁杂且乱,基于正式的开发,是不用这个样子操作的,但对于学习,这样的流程是很好的
通过一步步说明了,操作ORM的需求,每个语句为什么要写
基于长度考虑,我会尽量减少代码的演示,控制表达. 力求说明白,简短表达.
现在还在过渡期,请大家逐渐习惯一下,因为我自己也觉得,手机上看自己写的东西没那么舒服.所以开始改变.
