我有一个正在发展的 django 应用程序。模型经常改变,我使用 Django South 来应用模式迁移。
有时我的更改涉及填充基于 sql 逻辑添加的新值。
例如,为当前付费用户添加了一个新的布尔标志。我已经添加了该字段,应用了迁移,但现在我想根据其他表中的数据填充该字段以显示谁在付款。
我知道我可以用一个简单的 sql 语句来做到这一点,但我的环境是自动化的并且使用 CI。我想推送更改并自动填充标志。
我怎样才能做到这一点?与南? 与姜戈?
我有一个正在发展的 django 应用程序。模型经常改变,我使用 Django South 来应用模式迁移。
有时我的更改涉及填充基于 sql 逻辑添加的新值。
例如,为当前付费用户添加了一个新的布尔标志。我已经添加了该字段,应用了迁移,但现在我想根据其他表中的数据填充该字段以显示谁在付款。
我知道我可以用一个简单的 sql 语句来做到这一点,但我的环境是自动化的并且使用 CI。我想推送更改并自动填充标志。
我怎样才能做到这一点?与南? 与姜戈?
有一个东西叫做数据迁移,这是一个完美的用例:
数据迁移用于更改存储在数据库中的数据以匹配新架构或功能。
from south.v2 import DataMigration
from django.conf import settings
class Migration(DataMigration):
def forwards(self, orm):
# update your user's boolean flag here
在此处查看数据迁移示例。
或者,您也可以打开架构迁移.py
文件并在方法中填充您的字段forwards()
,如下所示:
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'User.paying'
db.add_column(u'user', 'paying',
self.gf('django.db.models.fields.BooleanField')(default=True),
keep_default=False)
# update your user's boolean flag here
def backwards(self, orm):
# Deleting field 'User.paying'
db.delete_column(u'user', 'paying')
您可以将代码添加到由south创建的迁移脚本中。
如果您更新了模型并完成schemamigration
了南,它将创建一个脚本来应用该迁移。它将在appname/migration/00N_some_name.py
.
forwards()
完成架构更改后,您可以在该脚本最后的方法中添加代码。