2

我目前在 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。但是,在我运行迁移之后,它并没有将列的数据类型从 更改textjsonb。所以我手动做了,因为它是一个较小的项目。对于这个项目,我真的不想手动更改数据库。

关于如何优雅地从 django-json-field 迁移并计划将其从我的代码和要求中删除的任何建议?

4

0 回答 0