【问题标题】:how to populate database fields when model changes in django如何在 django 中更改模型时填充数据库字段
【发布时间】:2013-09-04 05:50:09
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: mysql django django-models django-south


    【解决方案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')
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-02-01
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 2014-05-05
        • 1970-01-01
        • 2021-10-05
        相关资源
        最近更新 更多