目前进度
第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:
确保功能测试之间相互隔离
解决页面刷新延迟
使用TDD 实现新设计
逐步迭代,实现新设计
使用Django测试客户端一起测试视图、模板和URL
用于添加待办事项的URL和视图
调整模型

(html comment removed: more)
内容介绍
- 调整模型
- 调整测试
- 故障排除
- 迁移数据库
- 用外键实现关联
- 测试修改成果
- 根据模型调整代码
- 修正第一个错误
- 修正其他错误
调整模型
前面做了很多修改,现在调整一下,让代码更好看一点
调整测试
先看视图部分
vi lists/tests.py

新建了一个list对象,通过给.list属性赋值把代办事项归在对象下面
list是关键字,所以写成list_区别
对比数据库中保存的值和list_的值
故障排除
修改了测试类后,会出现许多熟悉的错误
让我们来一一排查
python manage.py test lists
#
ImportError: cannot import name 'List'
需要在models.py里建一个Item类
python manage.py test lists
#
AttributeError: 'List' object has no attribute 'save'
没有save属性,object改为继承model类
python manage.py test lists
#
django.db.utils.OperationalError: no such table: lists_list
数据库相关的故障
迁移数据库
python manage.py makemigrations
#
self.assertEqual(first_saved_item.list, list_)
AttributeError: 'Item' object has no attribute 'list'
用外键实现关联
Item没有list属性,要想办法实现
先做个text属性试试
vi lists/models.py

测试修改成果
python manage.py test lists
#
django.db.utils.OperationalError: no such column: lists_item.list
迁移一下
python manage.py makemigrations
#
AssertionError: 'List object' != <List: List object>
Django只保存了list对象的字符串形式
如果要保存对象之间的关系需要用外键
vi lists/models.py

再做一次数据库迁移
rm lists/migrations/0004_item_list.py
python manage.py makemigrations
根据模型调整代码
python manage.py test lists
#
ERROR: test_displays_all_items (lists.tests.ListViewTest)
django.db.utils.IntegrityError: NOT NULL constraint failed: lists_item.list_id
......
修正第一个错误
vi lists/tests.py

为代办事项创建父清单
修正其他错误
vi lists/views.py

调用代办事项的父清单
修改之后测试通过
预告
今天的内容也差不多了,下次会修改另一个内容,敬请期待
时间过的飞快,下节再见
