使用django迁移从旧要求(django-json-field)迁移的方式/最佳方式?

时间:2017-03-07 19:25:53

标签: django postgresql django-models django-migrations django-jsonfield

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

0 个答案:

没有答案