在我的数据库中我有专栏:
currency = models.CharField(max_length=10, blank=True, null=True)
我想将此列更改CharField
为IntegerField
.所以在models.py
我改变这个:
currency = models.IntegerField(blank=True, null=True)
然后我做了迁移:python manage.py makemigrations
和python manage.py migrate
.在那个动作之后它会出现错误:
django.db.utils.ProgrammingError: column "currency" cannot be cast automatically to type integer HINT: Specify a USING expression to perform the conversion.
之后在pgAdmin3控制台中进行了以下更改:
ALTER TABLE my_table ALTER COLUMN currency TYPE integer USING (currency::integer);
但我仍然有这个错误,我试图改变所有,但错误不会消失.我必须做什么来逃避这个错误.谢谢
我认为django迁移不执行转换,我查看了文档,但我没有发现任何有关列转换的事情.
如果现有数据对您来说不重要,您可以删除该列并创建一个新列
第一步从您的模型中删除货币并应用迁移
使用新定义再次添加货币并再次应用迁移
如果要保留数据,则需要为新列指定一个不同的名称,并使用旧列作为临时列来保留转换期间的数据.
重要提示: PostgreSQL是更强类型的最新版本,并为解释在这里,除非它明确地做了一些铸造可能无法在PosgreSQL工作.它需要更具体的类型.所以你必须根据你的价值做出正确的选择:
alter table my_table alter column currency type bigint using currency::bigint
或者可能:
alter table my_table alter column currency type numeric(10,0) using currency::numeric