4

我有一个正在发展的 django 应用程序。模型经常改变,我使用 Django South 来应用模式迁移。

有时我的更改涉及填充基于 sql 逻辑添加的新值。

例如,为当前付费用户添加了一个新的布尔标志。我已经添加了该字段,应用了迁移,但现在我想根据其他表中的数据填充该字段以显示谁在付款。

我知道我可以用一个简单的 sql 语句来做到这一点,但我的环境是自动化的并且使用 CI。我想推送更改并自动填充标志。

我怎样才能做到这一点?与南? 与姜戈?

4

2 回答 2

1

有一个东西叫做数据迁移,这是一个完美的用例:

数据迁移用于更改存储在数据库中的数据以匹配新架构或功能。

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')
于 2013-08-31T17:38:17.590 回答
0

您可以将代码添加到由south创建的迁移脚本中。

如果您更新了模型并完成schemamigration了南,它将创建一个脚本来应用该迁移。它将在appname/migration/00N_some_name.py.

forwards()完成架构更改后,您可以在该脚本最后的方法中添加代码。

于 2013-08-31T17:34:43.477 回答