我们正在从django 1.8->2.1和python 2.7->3.6过渡到django项目。
在旧的项目版本中,有类似这样的django模型,例如:
# models.py
from django.db import models
class RowStatusModel(models.Model):
active = models.BooleanField(default=True, db_column='is_active')
# ...
class Meta:
abstract = True
注意到
from __future__ import unicode_literals
是
不
在本模块中使用。那意味着
db_column
是一个Python 2
str
,对应于
bytes
在Python 3中。初始迁移,0001_initial.py,如下所示:
# 0001_initial.py
operations = [
# ...
('row_ef', models.BooleanField(default=True, db_column=b'is_active')
# ...
]
注意字节文字
b'is_active
我想这是姜戈为了更明确的目的而做的,但我不确定。
现在,在用2to3转换大多数代码库并运行之后
makemigrations
,python 3将字符串文本视为python 2中的unicode类型,从而生成一个迁移,其中
dB列
是字符串文本,对于继承自
RowStatusModel
:
# migrations/0023_auto_20180827_1955.py
migrations.AlterField(
# ...
field=models.BooleanField(default=True, db_column='is_active')
), # ...
有什么效果吗
,当
./manage.py migrate
跑了吗?“更改”纯粹是在Python方面,还是会产生什么副作用?
数据库引擎是
django.db.backends.postgresql
.
我知道,如果
migrate
会导致立即出现问题,但我更担心的是,会有更微妙的问题被引入,直到很晚才会被发现。