2013-04-09 2 views
1

데이터베이스에 기존 모델이 있습니다. 나는 hstore 필드로 그것을 향상시키고 싶다. 나는 hstore 포스트 그레스 확장, 장고 - hstore 응용 프로그램을 설치 장고 프로젝트에 적절한 설정을 변경 : 내가 장고 응용 프로그램은 새로운 설정으로 작동하는지 확인hstore 필드를 추가 한 후 이전을 만드는 방법은 무엇입니까? (django-hstore 대 South)

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

- 그렇습니다. 그래서 모델 중 하나에 새로운 필드를 추가했습니다.

data = hstore.DictionaryField(db_index=True) 

다음 단계 : db 마이그레이션. 그리고 여기 나는 길을 잃는다. 새 필드에 대한 이전을 만들 때 다음과 같이 표시됩니다.

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 

여기서 어떻게해야합니까? 내가 뭐 놓친 거 없니? 장고 - hstore 관련 기사에서 기본값 (또는 null = True)에 대한 참조를 찾지 못했습니다.

답변

1

이 메시지는 일반적으로 South가 데이터베이스에서 모델을 업데이트하려고 할 때 나타나며 수정하려는 테이블의 기존 행을 찾습니다. 데이터베이스에서 새 필드를 계속 작성하려면 이주중인 테이블의 기존 행에 대한 값을 지정해야합니다. 일반적으로 내가하는 일은 개발 단계라면 옵션 번호 2로 가서 필드 유형에 따라 0, {} 빈 dict 또는 NULL로 값을 설정합니다.

+0

네를하는 이전을 적용 할 때 파산했습니다. 나는 두려운 hstore입니다 .DictionaryField는 다른 짐승입니다. – Mike

+0

문제는 인덱스 플래그 일 수 있습니다. 데이터베이스가 사전을 인덱스로 처리하는 것이 복잡하다고 생각합니다. – PepperoniPizza

+0

실제로 처음에는 시도하지 않고 hstore DictionaryField의 기본값이었습니다. – Mike

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" 
관련 문제