我目前在 Django 1.7 上,我的数据库是 PostgreSQL。我有以下模型。
# myapp/models.py
from django.db import models
from json_field import JSONField # using django-json-field
from json_field.fields import JSONDecoder
class MyModel(models.Model):
the_data = JSONField(
decoder_kwargs={'cls': JSONDecoder, 'parse_float': float},
default='[{}]',
)
...
我现在希望升级到 Django 1.10 并利用JSONField
.django.contrib.postgres.fields
我改变我的模型看起来像这样。
# myapp/models.py
from django.db import models
from django.contrib.postgres.fields import JSONField # Now want to use the new JSONField
class MyModel(models.Model):
the_data = JSONField(
default='{}',
)
...
然后我为应用程序创建迁移。
./manage.py makemigrations myapp
当它尝试创建迁移时,它会抱怨......
from json_field.forms import JSONFormField
File "/Users/travismillward/Projects/amcards_env/lib/python2.7/site-packages/json_field/forms.py", line 5, in <module>
from django.forms import fields, util
ImportError: cannot import name util
我明白它为什么抱怨。django-json-field 未针对 django 1.10 更新,它希望导入json_field
原始迁移文件之一。因此,我可以返回并修改导入 json_field 的原始迁移文件,但它实际上不会修改列数据类型,因为它认为它已经完成。或者,我必须修复 django-json-fields 才能与 django 1.10 一起使用,这样才能创建迁移。即使我不使用它,我也必须保留该要求,这只是为了迁移!
在我的上一个项目中,我刚刚修改了原始迁移,使其认为它一直在使用django.contrib.postgres.fields.jsonb.JSONField
。但是,在我运行迁移之后,它并没有将列的数据类型从 更改text
为jsonb
。所以我手动做了,因为它是一个较小的项目。对于这个项目,我真的不想手动更改数据库。
关于如何优雅地从 django-json-field 迁移并计划将其从我的代码和要求中删除的任何建议?