如何在django中更改模型时填充数据库字段

时间:2013-08-31 17:25:47

标签: mysql django django-models django-south

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

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

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

我知道我可以使用简单的sql语句执行此操作,但我的环境是自动化的并使用CI。我想推送更改并自动填充标记。

我怎样才能做到这一点?南方?用Django?

2 个答案:

答案 0 :(得分:1)

有一个名为data migration的东西,这是一个完美的用例:

  

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

from south.v2 import DataMigration
from django.conf import settings

class Migration(DataMigration):
    def forwards(self, orm):
        # update your user's boolean flag here

查看数据迁移的示例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')

答案 1 :(得分:0)

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

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

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