2012-04-07 2 views
3

내 프로젝트의 몇 가지 맞춤 입력란이 포함 된 앱을 삭제했습니다. 이제 마이 그 레이션을 실행하려고하면 당연히 ImportError이됩니다. 이 필드는 다음과 같은 매우 기본적인 맞춤 설정이었습니다.남은 마이그레이션이 실행되도록 삭제 된 사용자 정의 필드를 조롱하려면 어떻게해야합니까?

from django.db.models.fields import IntegerField 

class SomeField(IntegerField): 
    def get_internal_type(self): 
     return "SomeField" 

    def db_type(self, connectio=None): 
     return 'integer' 

    def clean(self, value): 
     # some custom cleanup 
     pass 

그래서 어느 것도 데이터베이스 수준 맞춤 설정을 포함하지 않습니다.

이 코드를 제거하면 이후 마이 그 레이션이 모두 정상적으로 실행되도록 마이 그 레이션을 만들었습니다. 그러나 사전 삭제 데이터베이스에서 실행하려고하면 실수를 느꼈습니다.

베어 본 (bare-bones) 앱을 다시 만들어서 가져 오기 작업을 할 수 있지만 이상적으로 남부에 이러한 문제를 해결하는 메커니즘이 있는지 알고 싶습니다. 아니면 모범 사례가 있습니까? 마이 그 레이션을 수정하고 코드베이스를 만지지 않아도이 문제를 해결할 수 있다면 멋질 것입니다.

(장고 1.3, 사우스 0.7.3)은

답변

2

사우스 나중에 마이그레이션 삭제 필드의 참조를 보유하지 않습니다. 사용자 지정된 필드를 삭제하고 성공적으로 마이그레이션을 생성 한 경우 ImportError은 아마도 이러한 마이그레이션 된 사용자 지정 필드가 삭제 마이그레이션 전에 일부 실행 취소되지 않은 마이그레이션에서 계속 참조 됨으로 인해 발생할 수 있습니다. 그래서

  1. 갱신은 포장 - 제거 및 삭제 마이그레이션을 수행하기 직전 버전의 코드베이스는
  2. 은 삭제 이전에
  3. 업데이트 코드베이스를 마이그레이션하고
+0

오른쪽. 그러나 VCS를 되감기와 관련된 옵션을 탐색하고 싶습니다. 결국 HEAD를 사용하여 데이터베이스를 시드 할 수 있어야합니다. – muhuk

+0

@muhuk 그런 건 있는지 몰랐습니다. 그러나 프로덕션 DB의 스키마 및 테스트 DB 생성시 논리가 올바르며 마이그레이션이 잘 수행되면 마이그레이션을 변경할 수 있습니다. 예를 들어 일부 필드를 추가 한 다음 제거하는 최신 마이그레이션을 삭제하거나 마이그레이션 파일 내 모델 행을 수정하여 특정 필드를 삭제할 수 있습니다. 그것을 신중하게하십시오. – okm

1

이러한 간단한 정의를 마이그레이션 필드는 South 0.7+에서 매우 편리합니다. add_introspection_rules [1]이 정의되었습니다. (사용자 정의 필드 클래스 이후의 동일한 모듈에서) 마이그레이션이 작성되었을 때. 그런 다음 남쪽은이 들판을 "동결"시키지 않고 쉽게 제거 할 수 있습니다. 그런 다음 okm의 이전 대답이 도움이되지 않으면 이전 마이그레이션 수정을 다시 만듭니다.

관련 문제