[python] Django - 如何使用South重命名模型字段?


Answers

以下是我的工作:

  1. 在模型中更改列名(在本例中,它将是myapp/models.py
  2. 运行./manage.py schemamigration myapp renaming_column_x --auto

注意renaming_column_x可以是任何你喜欢的东西,它只是给迁移文件提供描述性名称的一种方式。

这会生成一个名为myapp/migrations/000x_renaming_column_x.py的文件,它将删除旧列并添加一个新列。

修改此文件中的代码以将迁移行为更改为简单重命名:

class Migration(SchemaMigration):

    def forwards(self, orm):
        # Renaming column 'mymodel.old_column_name' to 'mymodel.new_column_name'
        db.rename_column(u'myapp_mymodel', 'old_column_name', 'new_column_name')

    def backwards(self, orm):
        # Renaming column 'mymodel.new_column_name' to 'mymodel.old_column_name'
        db.rename_column(u'myapp_mymodel', 'new_column_name', 'old_column_name')
Question

我想更改模型中特定字段的名称:

class Foo(models.Model):
    name = models.CharField()
    rel  = models.ForeignKey(Bar)

应改为:

class Foo(models.Model):
    full_name     = models.CharField()
    odd_relation  = models.ForeignKey(Bar)

使用South最简单的方法是什么?




  1. 在项目设置文件中south添加到您安装的应用程序。
  2. 注释添加/修改的字段/表。
  3. $ manage.py Schemamigration <app_name> --initial
  4. $ manage.py migrate <app_name> --Fake
  5. 取消注释该字段并写入修改的字段
  6. $ manage.py Schemamigration --auto
  7. $ manage.py migrate <app_name>

如果您使用'pycharm',那么您可以使用'ctrl + shift + r'而不是'manage.py'和'shift'来获取参数。




Django 1.7引入了Migrations所以现在你甚至不需要安装额外的软件包来管理你的迁移。

要重命名模型,您需要先创建空迁移:

$ manage.py makemigrations <app_name> --empty

然后你需要像这样编辑你的迁移代码:

from django.db import models, migrations

class Migration(migrations.Migration):

dependencies = [
    ('yourapp', 'XXXX_your_previous_migration'),
]

operations = [
    migrations.RenameField(
        model_name='Foo',
        old_name='name',
        new_name='full_name'
    ),
    migrations.RenameField(
        model_name='Foo',
        old_name='rel',
        new_name='odd_relation'
    ),
]

之后你需要运行:

$ manage.py migrate <app_name>



Related