Django迁移会更改字段类型

时间:2015-01-24 12:00:28

标签: django django-models django-migrations

我对某个型号有一个FK

class A(models.Model):
    b = models.FK(to=B)

我需要将其更改为IntegerField,因此它看起来像

class A(models.Model):
    b_id = models.IntegerField()

如何在不真正更改数据库中的任何内容的情况下添加新迁移?

1 个答案:

答案 0 :(得分:2)

创建一个将更改字段类型的迁移,然后重命名该字段:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

    dependencies = [
        ('app', '000X_the_name_of_prev_migration'),
    ]

    operations = [
        migrations.AlterField(
            model_name='a',
            name='b',
            field=models.IntegerField(),
            preserve_default=True,
        ),
        migrations.RenameField(
            model_name='a',
            old_name='b',
            new_name='b_id',
        ),
    ]

事实上,在SQL级别,列b_id -> bb -> b_id将有两个重命名,但此列中的数据将被保留。