gpt4 book ai didi

django - 如何使用 Django South 为现有应用程序创建新数据库并设置默认值?

转载 作者:行者123 更新时间:2023-12-02 14:00:07 24 4
gpt4 key购买 nike

我正在处理一个使用 South 来迁移数据库的操作系统项目。我正在从头开始构建一个新数据库,我想确保 South 已设置,以便将来可以轻松更新数据库。

看来这个过程应该是:

  1. 创建数据库
  2. 同步数据库
  3. 迁移

但是,当我尝试迁移数据库时,早期的迁移之一(迁移 0004,它们转到 0009)会引发异常:

ValueError: You cannot add a null=False column without a default value.

我不明白如何向迁移 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)

所以,我猜测从 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'

我正在使用 South-0.7.2-py2.7.egg

最佳答案

安德鲁·戈德温提供了答案:

是的,使用:

./manage.py syncdb --all  

然后:

./manage.py migrate --fake  

但是,这也会忽略向数据库添加数据的任何迁移。

关于django - 如何使用 Django South 为现有应用程序创建新数据库并设置默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com