1

我在数据库中有一个现有模型。我想用一个 hstore 字段来增强它。我安装了 hstore Postgres 扩展,django-hstore 应用程序,更改了 django 项目中的相应设置:

SOUTH_DATABASE_ADAPTERS = {'default': 'south.db.postgresql_psycopg2'}
DATABASES = {
    'default': {
        'ENGINE': 'django_hstore.postgresql_psycopg2',
        ...

我检查了 django 应用程序是否适用于新设置——确实如此。所以我将新字段添加到其中一个模型中:

data = hstore.DictionaryField(db_index=True)

下一步:数据库迁移。在这里我迷路了。尝试为新字段创建迁移时,我得到以下信息:

The field 'Project.data' does not have a default specified, yet is NOT NULL.
Since you are adding this field, you MUST specify a default
value to use for existing rows. Would you like to:
 1. Quit now, and add a default to the field in models.py
 2. Specify a one-off value to use for existing columns now

我在这里做什么?我错过了什么?在任何 django-hstore 相关文章中,我都没有找到对默认值(或 null=True)的任何引用。

4

2 回答 2

1

如前所述,当您点击 2 时,您可以选择一个空字符串 ("") 或按照其存储方式填充该字段:

? The field 'MyModel.data' does not have a default specified, yet is NOT NULL.
? Since you are adding this field, you MUST specify a default
? value to use for existing rows. Would you like to:
?  1. Quit now, and add a default to the field in models.py
?  2. Specify a one-off value to use for existing columns now
? Please select a choice: 2
? Please enter Python code for your one-off default value.
? The datetime module is available, so you can do e.g. datetime.date.today()
>>> "foo=>bar,foo2=>bar2"
于 2013-07-12T17:47:23.440 回答
1

当 South 尝试更新数据库中的模型并在您尝试修改的表上找到现有行时,通常会出现此消息。为了继续并在数据库上创建新字段,您必须为要迁移的表的现有行指定一个值。我通常做的事情,如果是开发阶段,我会选择 2 号选项并将值设置为 0,{} 空字典,甚至 NULL,具体取决于字段类型。

于 2013-04-09T18:24:34.627 回答