Bry*_*ock 11 django django-database django-south
我正在使用一个使用South迁移数据库的操作系统项目.我正在从头开始构建一个新的数据库,我想确保设置South以便将来轻松更新数据库.
看来这个过程应该是:
但是,当我尝试迁移数据库时,早期迁移之一(迁移0004并且转到0009)会引发异常:
ValueError: You cannot add a null=False column without a default value.
Run Code Online (Sandbox Code Playgroud)
我不明白如何向迁移0004添加默认值,因此不会抛出此异常.
由于数据库为空,因此无需运行迁移.
但是, south_migrationhistory必须包含所有迁移的列表以及何时应用它们.
我试图破解它,只是手动将迁移0009添加到数据库,但这引发了另一个错误,因为尚未运行中间迁移.我还尝试向数据库添加一个字段,以查看我是否能够找出add_column的语法,其默认值为0.该格式与这些较旧的迁移完全不同.
以下是add_column语法的2个不同版本:
#0004 syntax:
db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'])
#0009 syntax:
syntax db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
Run Code Online (Sandbox Code Playgroud)
所以,我猜测在创建0004和今天之间南方代码发生了变化.
有没有办法用syncdb构建数据库,然后以某种方式更新south_migrationhistory而不运行manage.py migrate?
如果您有一个具有南迁移的现有应用程序,您将如何从头开始构建新数据库?
我无法迁移,因为整数字段没有默认设置.如何在较早的迁移中设置默认值?该领域甚至不再存在.
尝试语法:
db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'], {'default': 0})
#throws ValueError: You cannot add a null=False column without a default value.
db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
#throws AttributeError: Migration instance has no attribute 'gf'
Run Code Online (Sandbox Code Playgroud)
我正在使用South-0.7.2-py2.7.egg
Bry*_*ock 16
安德鲁戈德温提供了一个答案:
是的,使用:
./manage.py syncdb --all
Run Code Online (Sandbox Code Playgroud)
然后:
./manage.py migrate --fake
Run Code Online (Sandbox Code Playgroud)
但是,这也会忽略将数据添加到数据库的任何迁移.
| 归档时间: |
|
| 查看次数: |
10101 次 |
| 最近记录: |