2016-10-25 6 views
1

002_auto.py은 을 사용하여 데이터베이스를 변경하는 django 응용 프로그램 및 마이그레이션 파일을 가지고 있습니다. 앞으로 얼마나 많은 마이그레이션 파일을 만들지 모르겠지만 파일 002_auto.py을 마이그레이션 프로세스의 마지막 부분으로 적용 할 수 있습니다.django 마이그레이션이 항상 마지막으로 적용되도록 설정하는 방법

수동 단계 내가 migrate 명령을 실행 할 때마다 수행 할 필요없이 장고 마이그레이션을 수행하는 동안 마이그레이션이 마지막으로 실행되는 것을 설정하는 방법 (또는 변경 dependencies 변수마다 난 새로운 마이그레이션을 추가했습니다) ?

p.s. 나는 성공적으로 장고 마이 그 레이션 문서 및 기타 기사를 조사했습니다.

+1

왜 이걸 원하니? 그것은 다소 주먹 장소에서 마이그레이션을 사용한다는 생각에 반대합니다. – FeedTheWeb

답변

1

아마도 모델 중 하나에 post_migrate 신호를 사용하고 002_auto.py에 코드를 입력하여 hanlder에 신호를 보낼 수 있습니다.

https://docs.djangoproject.com/en/1.10/ref/signals/#post-migrate

+0

불행히도 RunPython이 post_migrate를 사용하는 경우 금지 된 RunPython을 변경하기 때문에 나에게 도움이되지 않습니다. –

+0

OK, 원하는 로직을 원시 SQL 쿼리에 넣을 수 있습니까? –

2

당신은 migrate 명령을 하위 클래스와 super 전화

# project/myapp/management/commands/custom_migrate.py 
from django.core.management.commands.migrate import Command as MigrateCommand 

class Command(MigrateCommand): 
    def handle(self, *args, **options): 
     super().handle(*args, **options) 
     # put your code from 002_auto.py here 

당신의 INSTALLED_APPS에 응용 프로그램을 추가해야이 명령 한 후이 코드를 삽입. 사용자 정의 관계없이, https://docs.djangoproject.com/en/1.10/howto/custom-management-commands/

+0

custom_migrate를 별도로 호출하는 것을 피할 수있는 방법이 있습니까? (마이그레이션 실행시 호출하십시오.) –

+0

@AndriyIvaneyko 원한다면 'migrate'라고 이름을 붙이면되고 manage.py는 'migrate'대신에 기본 작동 하나 작동해야하지만 체크하지 않았습니다. –

1

마이그레이션하는 경우 명령 그 적 (작동하지 않을 특정 순서대로 적용 할 필요에 대해 그리고이

python manage.py custom_migrate 

처럼 호출 할 수있는 것은 더 읽기 어떤 당신이 시도 해키 솔루션).

미래에 어느 정도 시점이 올 것으로 예상되는 경우 변경 사항을 도입 할 가능성이 있습니다.

가장 좋은 옵션은 사용자 지정 관리 명령 및/또는 bash 스크립트를 만든 다음이를 사용하여 데이터베이스를 마이그레이션하고 변경하는 것입니다.