2013-08-31 2 views
3

진화중인 장고 앱이 있습니다. 모델이 자주 변경되고 Django South를 사용하여 스키마 마이그레이션을 적용합니다.장고에서 모델 변경시 데이터베이스 필드를 채우는 방법

가끔 내 변경 사항에 SQL 로직을 기반으로 추가 된 새 값이 채워지는 경우가 있습니다.

예를 들어 현재 유료 사용자에게 새로운 부울 플래그를 추가했습니다. 필자는 필드를 추가하고 마이그레이션을 적용했지만 현재 다른 테이블의 데이터를 기반으로 필드를 채워 누가 지불하는지 보여주고 싶습니다.

간단한 SQL 문으로이 작업을 수행 할 수 있지만 내 환경은 자동화되어 있으며 CI가 사용됩니다. 변경 사항을 푸시하고 플래그가 자동으로 채워지도록하고 싶습니다.

어떻게하면됩니까? 남쪽? 장고와 함께?

답변

1

이 그것을 위해 완벽한 사용 사례입니다 :

데이터 마이그레이션이 일치 새로운 스키마 또는 기능에 데이터베이스에 저장된 데이터를 변경하는 데 사용됩니다.

from south.v2 import DataMigration 
from django.conf import settings 

class Migration(DataMigration): 
    def forwards(self, orm): 
     # update your user's boolean flag here 

에는 데이터 마이그레이션 here의 예를 참조.

또는 양자 택일로, 당신은 당신의 스키마 이전 .py 파일을 열 수와 같이, forwards() 방법에 필드를 채울 :

class Migration(SchemaMigration): 
    def forwards(self, orm): 
     # Adding field 'User.paying' 
     db.add_column(u'user', 'paying', 
         self.gf('django.db.models.fields.BooleanField')(default=True), 
         keep_default=False) 

     # update your user's boolean flag here 

    def backwards(self, orm): 
     # Deleting field 'User.paying' 
     db.delete_column(u'user', 'paying') 
0

남쪽으로 만든 마이그레이션 스크립트에 코드를 추가 할 수 있습니다.

모델을 업데이트하고 schemamigration을 south와 함께 수행 한 경우 해당 마이그레이션을 적용하기위한 스크립트가 생성됩니다. appname/migration/00N_some_name.py에 있습니다.

메서드에서 스키마 변경이 끝난 후 해당 스크립트의 코드를 추가 할 수 있습니다. data migration라는 일이 있습니다