代码之家  ›  专栏  ›  技术社区  ›  Atma

当django中的模型发生变化时,如何填充数据库字段

  •  4
  • Atma  · 技术社区  · 11 年前

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

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

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

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

    我如何才能做到这一点?和南方?和Django在一起?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Community rcollyer    7 年前

    有一种东西叫 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')
    
        2
  •  0
  •   Rohan    11 年前

    您可以在由创建的迁移脚本中添加代码 南方 .

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

    您可以在中添加代码 forwards() 方法。