您可以直接将列的类型从 int 更改为 string。请注意,除非启用严格的 sql 模式,否则整数将被截断为最大字符串长度,并且数据可能会丢失,因此请务必进行备份并选择一个max_length
这已经足够高了。另外,迁移不能轻易逆转(sql 不直接支持将 string 列更改为 int 列),因此备份在这方面非常重要。
Django 1.7 之前/南
您可以使用db.alter_column
。首先,创建迁移,但先不要应用它,否则您将丢失数据:
>>> python manage.py schemamigration my_app --auto
然后,更改forwards
方法如下:
class Migration(SchemaMigration):
def forwards(self, orm):
db.alter_column('some_table', 'id', models.CharField(max_length=255))
def backwards(self, orm):
raise RuntimeError('Cannot reverse this migration.')
这将更改该列以匹配新的CharField
场地。现在应用迁移就完成了。
姜戈 1.7您可以使用AlterField
更改列的操作。首先,创建一个空迁移:
>>> python manage.py makemigrations --empty my_app
然后,添加以下操作:
class Migration(migrations.Migration):
operations = [
migrations.AlterField('some_model', 'id', models.CharField(max_length=255))
]
现在运行迁移,Django 将更改该字段以匹配新的CharField
.