我目前在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
中的新(ish)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迁移并计划将其从我的代码和要求中删除的任何建议?