2017-10-26 9 views
0

장고 모델 마이그레이션에 문제가 있습니다. 앱에 일부 모델이 있는데 내부에 데이터가 이미 있습니다. 애플리케이션에 일부 모델을 추가하고 makemigrations을 실행하면 변경 사항이 없다는 애플리케이션 보고서가 표시됩니다. 때때로 마이그레이션 할 때 약간의 오류가 발생한다는 것을 알고 있습니다. 따라서 데이터베이스에서 django_migrations 테이블을 삭제하고 makemigrations을 다시 실행하면 프로그램이 새로운 필드를 찾았습니다.Django 마이그레이션 : 관계가 이미 있습니다

이제는 migrate 시스템을 실행하면 일부 테이블이 이미 있음을 알 수 있습니다. (어느 쪽이 좋기 때문에.) 내가 이미 데이터를 가지고 있기 때문에 그 테이블을 삭제하고 싶지 않습니다.

프로그램에 이미 모두이있는 것으로 생각되므로 migrate --fake을 실행할 수 없습니다. 이는 사실이 아닙니다.

그래서 프로그램을 알리는 방법을 찾고 있는데, 테이블을 건너 뛰면 마이그레이션을 실행합니다. (--fake it)

또 다른 질문은 makemigrations가 내 변경 사항 (일부 캐시 문제 ...)을 인식하지 못하는 이유는 무엇입니까?

+0

는 ['--fake - 초기에서보세요 '] (https://docs.djangoproject.com/en/1.11/topics/migrations/#initial-migrations) 옵션을 사용하십시오. – Alasdair

답변

0

이렇게하면 어떨까요? 해당 패키지는 0001_initial.py 같은 이름을 말할 수 것은 마이그레이션을 생성합니다

파이썬 manage.py의 makemigrations

은 (이미 준비 마이그레이션 파일이있는 경우이 단계를 건너 뛰십시오)

파일을 수동으로 편집하여 데이터베이스에 이미 생성 된 모델을 제외한 모든 모델을 삭제하십시오.

이제 가짜 마이그레이션을 수행하십시오. 그러면 데이터베이스가 모델과 동기화됩니다.

그런 다음 새로운 마이그레이션 파일과 함께 만든 테이블의 나머지 부분을 다시 makemigrations를 실행 --fake

파이썬 마이그레이션 manage.py를. 이러한 변화는 이미 거기에 대한

  1. 마이그레이션 : makemigrations이 모델 때문에 같은 이유가 될 수 recogonize하지 않은 이유는 다른 질문에 대해서는

    파이썬 manage.py의 makemigrations

    일부 마이그레이션 파일에서.

  2. INSTALLED_APPS에서 package_name을 언급하지 못했지만 여기에서 그랬다고 생각합니다.
1

당신이 당신의 모델을 변경할 때마다 다음 단계를 수행하십시오 다음

python manage.py makemigrations [your app name] 

:

python manage.py migrate 

그것을 잘 작동합니다. 그러나 테이블에 이미 데이터 (행)가있는 경우 쿼리 각각에 대해 기본값을 지정해야합니다.
없는 경우, 장고 그들 의 기본 값을 지정하라는 메시지가 아니면 그냥 아래처럼 필드에 blank=True 또는 null=True를 사용하려고 할 수 있습니다

website   = models.URLField(blank=True)