【发布时间】:2019-03-30 18:39:15
【问题描述】:
我在 models.py:: 中更改了我的 CharField 之一
models.CharField(max_length=128, blank=True)
进入 IntegerField -->
models.IntegerField(default=0)
我有该字段的数据,主要是空字符串("")或整数作为字符串(例如:"10")。
所以我想在迁移时将这些字符串转换为整数。例如::
如果空字符串("")转换为0,否则转换为整数。
当我执行./manage.py migrate 命令时,我怎样才能做到这一点?
这里是使用./manage.py makemigrations:: 创建的迁移文件
# Generated by Django 2.1.2 on 2018-10-25 04:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dashboard', '0002_auto_20181024_1544'),
]
operations = [
migrations.AlterField(
model_name='aclpermissions',
name='ordering',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='submenus',
name='ordering',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='subsubmenus',
name='ordering',
field=models.IntegerField(default=0),
),
]
当我运行./manage.py migrate 时出现错误::
psycopg2.DataError: invalid input syntax for integer: ""
因为有空字符串""的字段。
所以我想将空字符串("")转换为0。
【问题讨论】:
-
您将我的 CharField 之一更改为 IntegerField。哪一个?您的迁移文件显示您更改了 3 个字段。
-
@RedCricket 我将 3 个字符字段更改为整数字段。我通过将db中的所有
empty strings更新为0解决了这个问题。现在./manage.py migrate命令工作正常。 -
你的意思是你把所有的空值都更新为字符串“0”了吗?
-
@RedCricket 是的。更新后我运行
./manage.py migrate,它工作正常。 -
我将首先创建 3 个新字段并编写 data migration,然后运行第二次迁移,将这 3 个字段重命名。