Django - 如何使用 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 执行此操作的最简单方法是什么?
I would like to change a name of specific fields in a model:
class Foo(models.Model):
name = models.CharField()
rel = models.ForeignKey(Bar)
should change to:
class Foo(models.Model):
full_name = models.CharField()
odd_relation = models.ForeignKey(Bar)
What's the easiest way to do this using South?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以使用
db.rename_column
< /a> 函数。db.rename_column 的第一个参数是表名称,因此记住如何Django 创建表名称:
如果您有一个多字、驼峰式命名的模型名称(例如 ProjectItem),则表名称将为
app_projectitem
(即,在project 和
item
即使它们是驼峰式的)。You can use the
db.rename_column
function.The first argument of
db.rename_column
is the table name, so it's important to remember how Django creates table names:In the case where you have a multi-worded, camel-cased model name, such as ProjectItem, the table name will be
app_projectitem
(i.e., an underscore will not be inserted betweenproject
anditem
even though they are camel-cased).我的做法如下:
myapp/models.py
)./manage.py schemamigration myapp renaming_column_x --auto
注意 renaming_column_x 可以是您喜欢的任何内容,这只是为迁移文件提供描述性名称的一种方式。
这将生成一个名为
myapp/migrations/000x_renaming_column_x.py
的文件,该文件将删除旧列并添加新列。修改此文件中的代码,将迁移行为更改为简单的重命名:
Here's what I do:
myapp/models.py
)./manage.py schemamigration myapp renaming_column_x --auto
Note
renaming_column_x
can be anything you like, it's just a way of giving a descriptive name to the migration file.This will generate you a file called
myapp/migrations/000x_renaming_column_x.py
which will delete your old column and add a new column.Modify the code in this file to change the migration behaviour to a simple rename:
我不知道 db.rename 列,听起来很方便,但是在过去,我将新列添加为一个架构迁移,然后创建一个数据迁移以将值移动到新字段中,然后创建第二个架构迁移以删除旧列
I didn't know about db.rename column, sounds handy, however in the past I have added the new column as one schemamigration, then created a datamigration to move values into the new field, then a second schemamigration to remove the old column
Django 1.7 引入了迁移,因此现在您甚至不需要安装额外的包来管理迁移。
要重命名您的模型,您需要首先创建空迁移:
然后您需要像这样编辑迁移的代码:
然后您需要运行:
Django 1.7 introduced Migrations so now you don't even need to install extra package to manage your migrations.
To rename your model you need to create empty migration first:
Then you need to edit your migration's code like this:
And after that you need to run:
只需更改模型并在 1.9 中运行
makemigrations
Django 会自动检测到您已删除并创建了单个字段,并询问:
说“是”,就会创建正确的迁移。魔法。
Just change the model and run
makemigrations
in 1.9Django automatically detects that you've deleted and created a single field, and asks:
Say yes, and the right migration gets created. Magic.
south
添加到项目设置文件中已安装的应用程序中。$ manage.py Schemamigration; --initial
$ manage.py migrate; --Fake
$ manage.py Schemamigration --auto
$ manage.py migrate
如果您正在使用 'pycharm',那么您可以使用 'ctrl+shift+r' 代替 'manage.py' ,并使用 'shift ' 作为参数。
south
to your installed apps in project setting file.$ manage.py Schemamigration <app_name> --initial
$ manage.py migrate <app_name> --Fake
$ manage.py Schemamigration --auto
$ manage.py migrate <app_name>
If you are using 'pycharm', then you can use 'ctrl+shift+r' instead of 'manage.py' , and 'shift ' for parameters.