Python 从CharField迁移到CharField的PostgreSQL ArrayField
我有一个Django型号,带有Python 从CharField迁移到CharField的PostgreSQL ArrayField,python,django,python-3.x,django-migrations,Python,Django,Python 3.x,Django Migrations,我有一个Django型号,带有CharField。我想将其迁移到包含CharField元素的PostgreSQL。看起来这里应该包括,但我具体应该怎么做 原始型号: from django.db import models class TestModel(models.Model): test_field = models.CharField( max_length=128, choices=[("a", "AAA"), ("b", "BBB")],
CharField
。我想将其迁移到包含CharField
元素的PostgreSQL。看起来这里应该包括,但我具体应该怎么做
原始型号:
from django.db import models
class TestModel(models.Model):
test_field = models.CharField(
max_length=128,
choices=[("a", "AAA"), ("b", "BBB")],
blank=True,
default="",
)
数据库表中有一些从此模型创建的行:
from my_app.models import TestModel
t1 = TestModel.objects.create() # test_field == ''
t2 = TestModel.objects.create(test_field="a")
现在我想迁移到:
from django.contrib.postgres.fields import ArrayField
class TestModel(models.Model):
test_field = ArrayField(
models.CharField(max_length=128, choices=[("a", "AAA"), ("b", "BBB")]),
default=list,
blank=True
)
…在任何情况下,测试字段
在原始模型中是空字符串”,成为新模型和数据库字段中的空列表,[]
在Python空间中,这看起来像:
convert_ftype = lambda val: [val] if val else []
使上面的两个模型实例成为:
t1 = TestModel.objects.create() # test_field == []
t2 = TestModel.objects.create(test_field=["a"])
简单地运行
/manage-makemigrations&&/manage-migrate
会抛出一个django.db.utils.DataError
,这并不奇怪。您应该在第一次迁移中同时拥有这两个字段,然后在数据迁移(RunPython)中根据CharField的值填充ArrayField,然后删除CharField(第三次迁移)然后重命名ArrayField(第四次迁移)。您已经完全说服我在@dirkgroten中寻找其他选项。您应该在第一次迁移中同时拥有这两个字段,然后在数据迁移(RunPython)中根据CharField的值填充ArrayField,然后删除CharField(第三次迁移),然后重命名ArrayField(第四次迁移).好吧,你完全说服了我去寻找其他的选择@dirkgroten