将Django从1.7升级到1.8小计

之前在项目中将Django从1.7升级到1.8,现在想起来记录一下相关的步骤和过程。

由于项目一开始用的是1.6,所以用python manage.py startapp默认没有migrations这个package,而之前又有一些model是使用syncdb的,并且之后再没修改过,所以在用1.7的时候一直都没什么问题,而且1.7会自动去侦测没有makemigrations的model并自动migrate,导致了在升级1.8的过程中出现了一些小插曲,这里来记录一下。

1.7和1.8在migrate时的顺序不同(具体可以看一下源代码),所以导致了1.7能正常migrate,但是在1.8的时候会报错ColoumDoesNotExist,解决方案是看看报错信息中到底说的是哪个表没有渲染成功。我们只要先给这个app makemigrations就可以了,如果还出错的话就追根溯源到第一个报错的表,然后按顺序一个一个去makemigrations即可。

解决了migrations的差异之后,1.7和1.8基本是完全兼容的,别的都不需要进行修改。不过升级到1.8之后就算在debug模式下127.0.0.1默认也不在settings中的ALLOWED_HOSTS中了,所以需要添加进去才能在本地访问。

还有就是1.8用了新的TEMPLATES的设置方法,具体的看看文档稍微修改下就好了,非常简单问题不大。

附上1.8要回退1.7的脚本(经测试有效):

1
2
3
python manage.py migrate auth 0001
python manage.py migrate contenttypes 0001
pip install django==1.7.11