제목에서 알 수 있듯이 마이그레이션이 작동하지 않는 것 같습니다.
응용 프로그램은 원래 1.6 미만이므로 마이그레이션이 처음에는 존재하지 않으며 실제로 실행 python manage.py migrate
하면 다음과 같은 결과가 나타납니다.
Operations to perform:
Synchronize unmigrated apps: myapp
Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
No migrations to apply.
에서 모델을 변경해 myapp
도 예상대로 마이그레이션되지 않은 것으로 표시됩니다.
그러나 python manage.py makemigrations myapp
내가 달리면 :
No changes detected in app 'myapp'
명령을 실행하는 방법과 방법에 상관없이 앱이 변경 사항을 감지하지 못하거나 마이그레이션 파일을 앱에 추가하지도 않습니다.
앱을 마이그레이션에 강제로 적용하고 본질적으로 “이것이 내 작업의 기반”이라고 말하거나 다른 방법을 말하는 방법이 있습니까? 아니면 뭔가 빠졌습니까?
내 데이터베이스는 PostgreSQL 데이터베이스이므로 전혀 도움이되지 않습니다.
답변
django 1.6에서 만든 기존 앱에서 변경하는 경우 설명서에 나열된 하나의 사전 단계를 수행해야합니다.
python manage.py makemigrations your_app_label
설명서에서 가장 먼저 할 일은 python manage.py makemigrations
실패 할 것이기 때문에 설명서에 앱 레이블을 명령에 추가해야한다는 것이 명확하지 않습니다 . 초기 마이그레이션은 버전 1.7에서 앱을 만들 때 수행되지만 1.6에서 온 경우에는 수행되지 않았습니다. 자세한 내용은 설명서의 ‘앱에 마이그레이션 추가’ 를 참조하십시오.
답변
다음과 같은 이유로 발생할 수 있습니다.
INSTALLED_APPS
목록에 앱을 추가하지 않았습니다settings.py
( 사용중인 django 버전에 따라 app 폴더의 apps.py에서 appConfig의 서브 클래스에 앱 이름 또는 점으로 구분 된 경로 를 추가해야 함 ). INSTALLED_APPS 설명서를 참조하십시오migrations
해당 앱 안에 폴더 가 없습니다 . (해결 방법 : 해당 폴더를 작성하십시오).- 해당 앱의 폴더
__init__.py
안에 파일 이 없습니다migrations
. (해결 방법 : 이름이 __init__.py 인 빈 파일을 만드십시오 ) __init__.py
앱 폴더 안에 파일 이 없습니다 . (해결 방법 : 이름이 __init__.py 인 빈 파일을 만드십시오 )models.py
앱에 파일 이 없습니다- 파이썬 클래스 (모델로 가정)는
models.py
상속받지 않습니다.django.db.models.Model
- 모델 정의에서 의미 상 실수가 있습니다.
models.py
참고 :
일반적인 실수는 파일 에 migrations
폴더 를 추가하는 것입니다 .gitignore
. 원격 저장소에서 복제하면 migrations
폴더 및 / 또는 __init__.py
파일이 로컬 저장소에 없습니다. 이로 인해 문제가 발생합니다.
나는에 다음 라인을 추가하여 마이그레이션 파일을 gitignore하는 것이 좋습니다 .gitignore
파일을
*/migrations/*
!*/migrations/__init__.py
답변
좋아, 분명한 단계를 놓친 것처럼 보이지만 다른 사람이 동일한 경우를 대비하여 게시하십시오.
1.7로 업그레이드 할 때 내 모델이 관리되지 않게되었습니다 ( managed = False
) True
. 이전 과 같이 모델이 있지만 되 돌린 것 같습니다.
해당 줄을 제거하고 (기본값은 True로 설정) makemigrations
즉시 실행 하면 마이그레이션 모듈이 만들어져 작동합니다. makemigrations
관리되지 않는 테이블에서 작동하지 않습니다 (후시에는 분명합니다)
답변
내 솔루션은 여기에서 다루지 않았으므로 게시하고 있습니다. 내가 사용하고있었습니다 syncdb
– 단지 프로젝트 그것을 얻기 위해에 대한 실행. 그런 다음 Django 마이그레이션을 사용하려고 시도했을 때 처음에는 가짜 였고 ‘OK’라고 말했지만 데이터베이스에는 아무런 변화가 없었습니다.
내 솔루션은 내 응용 프로그램에 대한 모든 마이그레이션 파일을 삭제하는 것이 었습니다 뿐만 아니라 로의 응용 프로그램 마이그레이션에 대한 데이터베이스 레코드 django_migrations
테이블.
그런 다음 방금 초기 마이그레이션을 수행했습니다.
./manage.py makemigrations my_app
뒤에 :
./manage.py migrate my_app
이제 문제없이 마이그레이션을 수행 할 수 있습니다.
답변
@furins에 동의하십시오. 모든 것이 순서대로 보이지만이 문제가 발생하면 Model 클래스에 추가하려는 속성과 제목이 같은 속성 메소드가 있는지 확인하십시오.
- 추가하려는 속성과 이름이 비슷한 메소드를 제거하십시오.
- manage.py makemigrations my_app
- manage.py 마이그레이션 my_app
- 메소드를 다시 추가하십시오.
답변
이것은 어리석은 실수이지만 모델 클래스의 필드 선언 줄 끝에 추가 쉼표가 있으면 해당 줄이 적용되지 않습니다.
데프를 복사하여 붙여 넣을 때 발생합니다. 자체적으로 배열로 정의 된 마이그레이션에서
어쩌면 이것은 누군가를 도울 것입니다 🙂
답변
어쩌면 너무 늦었지만 migrations
앱에 __init__.py
파일 이있는 폴더 를 만들려고 했 습니까?
