我在数据库中有一个现有的模型。我想用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)的引用。
答案 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"