我想改变一个模型中特定字段的名称:
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最简单的方法是什么?
我想改变一个模型中特定字段的名称:
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最简单的方法是什么?
当前回答
我是这么做的:
在模型中更改列名(在本例中为myapp/models.py) 执行。/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')
其他回答
我是这么做的:
在模型中更改列名(在本例中为myapp/models.py) 执行。/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')
将south添加到项目设置文件中已安装的应用程序中。 注释掉添加/修改的字段/表。 $ manage.py Schemamigration <app_name>——initial .py $ manage.py migrate <app_name>——false 取消注释字段并写入修改后的字段 $ manage.py Schemamigration——自动 $ manage.py migrate <app_name>
如果你正在使用'pycharm',那么你可以使用'ctrl+shift+r'来代替'manage.py',并使用'shift '来表示参数。
Django 1.7引入了迁移,所以现在你甚至不需要安装额外的包来管理你的迁移。
要重命名你的模型,你需要先创建空迁移:
$ 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>
我不知道db。重命名列,听起来很方便,但是在过去,我将新列作为一个模式迁移添加,然后创建一个数据迁移以将值移动到新字段,然后再创建第二个模式迁移以删除旧列
只需更改模型并在1.9中运行makemigrations即可
Django会自动检测到你已经删除并创建了一个字段,并询问:
Did you rename model.old to model.new (a IntegerField)? [y/N]
说“是”,就会创建正确的迁移。魔法。