좋아, 이것은 정말로 어리석은 일처럼 보이고, 어딘가에 뭔가 빠져 있다고 확신합니다.
Django에서 South를 사용하여 역방향 마이그레이션을 어떻게 수행합니까?
따라서 모델을 조정하고을 사용하여 마이그레이션을 생성하고을 사용하여 마이그레이션을 schemamigration
실행했습니다. migrate
이제는 이것이 내가 원하는 것이 아니며 이전 방식으로 돌아 가기를 원합니다.
수동으로 db 테이블을 편집하고 마이그레이션 파일을 제거하는 데 부족한 경우 마이그레이션을 롤백하는 방법은 무엇입니까? Google을 통해 South를 사용하여 이전 마이그레이션에 대한 참조를 찾았지만 아직 확실한 코드 예제를 찾지 못했습니다.
누구든지 도울 수 있습니까?
답변
롤백하려는 마이그레이션 직전 의 마이그레이션 수를 파악해야합니다 .
앱에는 파일 이름이 다음과 같은 마이그레이션 디렉토리가 있어야합니다.
0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py
일반적으로을 실행 ./manage.py migrate your_app
하면 South는 모든 새 마이그레이션을 순서대로 실행합니다. (새로운 테이블을 결정하기 위해 데이터베이스 테이블을 확인합니다).
그러나 번호로 마이그레이션을 지정할 수도 있으며 South는 데이터베이스 를 앞으로 또는 뒤로 마이그레이션하여 해당 시점으로 이동합니다. 따라서 위의 예제 파일을 사용하여 이미 최대 0003으로 마이그레이션했으며 0003을 반대로 실행하려는 경우 (실행 취소, 효과적으로 실행)
./manage.py migrate your_app 0002
South는 데이터베이스를보고 이미 0003을 실행했음을 인식하고 0002로 돌아가려면 0003에 대한 역방향 마이그레이션을 실행해야한다고 결정합니다.
답변
누군가 (나 같은 사람) 가 초기 (0001)에서 다시 마이그레이션 하는 방법을 궁금해 한 경우 :
django-admin.py migrate some_app zero
산출:
Running migrations for some_app:
- Migrating backwards to zero state.
< some_app:0001_initial
“zero”는 마이그레이션 이전의 특수 상태입니다.
참조 : http://south.aeracode.org/docs/commands.html
답변
매개 변수 끝에 마이그레이션 이름을 추가하십시오.
./manage.py migrate app-name 00xx-migration-name