如何在添加hstore字段后创建迁移? (django-hstore vs.南方)

时间:2013-04-09 17:23:20

标签: python django postgresql django-south hstore

我在数据库中有一个现有的模型。我想用hstore字段来增强它。我安装了hstore Postgres扩展,django-hstore app,更改了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)的引用。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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"