programing

장고 1.7 - 변경 사항을 감지하지 않는 마이그레이션 수행

megabox 2023. 7. 18. 21:37
반응형

장고 1.7 - 변경 사항을 감지하지 않는 마이그레이션 수행

제목에서 알 수 있듯이 마이그레이션이 제대로 작동하지 않는 것 같습니다.

원래 앱이 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'

명령을 어떻게 실행하든 상관없이 앱에 변경 사항이 있는 것으로 인식하지도 않고 마이그레이션 파일을 앱에 추가하지도 않습니다.

앱을 강제로 마이그레이션하고 기본적으로 "여기가 내 작업 기반"이라고 말할 수 있는 방법이 있습니까?아니면 제가 뭔가를 놓치고 있나요?

내 데이터베이스는 Postgre입니다.도움이 된다면 SQL 1.

장고 1.6에서 만든 기존 앱에서 전환하는 경우 설명서에 나와 있는 사전 단계를 하나 수행해야 합니다.

python manage.pymake 마이그레이션 your_app_label

되어 있지 . 에 앱 레이블을 해야 한다는 내용이 있습니다. 명령에서 가장 먼저 수행해야 하는 작업은 다음과 같습니다.python manage.py makemigrations실패할 겁니다초기 마이그레이션은 버전 1.7에서 앱을 만들 때 수행되지만, 1.6에서 왔다면 수행되지 않았을 것입니다.자세한 내용은 설명서의 '앱에 마이그레이션 추가'를 참조하십시오.

이 문제는 다음과 같은 이유로 인해 발생할 수 있습니다.

  1. 목록에 앱을 추가하지 않았습니다(사용 중인 django 버전에 따라 앱 폴더의 apps.py 에 있는 AppConfig 하위 클래스에 이름 또는 점선 경로를 추가해야 합니다).설명서 참조: INSTALLED_APPs
  2. 해당 앱에는 폴더가 없습니다. (솔루션: 해당 폴더만 생성하십시오.)
  3. 해당 앱의 폴더 내부에 파일이 없습니다. (해결 방법:이름을 사용하여 빈 파일을 만들기만 하면 됩니다.)
  4. 앱 폴더 안에 파일이 없습니다. (해결 방법:이름을 사용하여 빈 파일을 만들기만 하면 됩니다.)
  5. 앱에 파일이 없습니다.
  6. 의 Python 클래스(모델이어야 함)가 상속되지 않습니다.
  7. 당신은 모델을 정의하는 데 약간의 의미적인 실수가 있습니다.

참고: 일반적인 실수는 다음과 같습니다.migrations에 있습니다..gitignore시, 일니다입파. 원repo에복때할제,migrations 및 폴및또/는더__init__.py로컬 repo에서 파일이 누락됩니다.이로 인해 문제가 발생합니다.

마이그레이션 파일은 보고서에 포함되어야 합니다.여기서 읽으세요.팀에서 마이그레이션 문제가 자주 발생하는 경우 다음과 같이 마이그레이션 파일을 무시할 수 있습니다.

을 다음을추행마이파것제무을다에 추가하여 하는 것을 합니다..gitignore

*/migrations/*
!*/migrations/__init__.py

django 설명서에 따라 마이그레이션 파일을 무시하지 않는 것이 좋습니다.

좋아요, 제가 명백한 단계를 놓친 것처럼 보이지만, 다른 사람들도 똑같이 할 경우를 대비해 이것을 게시합니다.

할 때 내 관리되지 되었습니다(1.7인치 모델).managed = False) - 나는 그것들을 가지고 있었습니다.True이전에 그랬지만 되돌아간 것 같습니다.

줄을 후 ( 를 합니다.makemigrations즉시 마이그레이션 모듈을 만들고 이제 작동합니다. makemigrations되지 않는시각에 함).

제 솔루션이 여기에 포함되지 않아서 게시합니다.는 사가용던하를 사용해 .syncdb프로젝트를 시작하고 실행하기 위한 것입니다.그런 다음 Django 마이그레이션을 사용하려고 하면 처음에는 마이그레이션이 'OK'로 표시되지만 데이터베이스에는 아무 일도 일어나지 않았습니다.

제 솔루션은 앱의 모든 마이그레이션 파일과 앱 마이그레이션에 대한 데이터베이스 레코드를 삭제하는 것이었습니다.django_migrations

그런 다음 다음을 사용하여 초기 마이그레이션을 수행했습니다.

./manage.py makemigrations my_app

다음 순서:

./manage.py migrate my_app

이제 문제없이 마이그레이션을 수행할 수 있습니다.

@furins에 동의합니다.모든 것이 정상인 것처럼 보이지만 이 문제가 발생하면 모델 클래스에 추가하려는 속성과 동일한 제목의 속성 메서드가 있는지 확인합니다.

  1. 추가할 속성과 이름이 유사한 메서드를 제거합니다.
  2. manage.py 마이그레이션을 my_app으로 수행합니다.
  3. manage.py my_app 마이그레이션
  4. 메서드를 다시 추가합니다.

이것은 실수하기에는 어리석은 일이지만, 모델 클래스에서 필드 선언 줄의 끝에 쉼표가 추가되어 있으면 줄이 아무런 영향을 받지 않습니다.

def를 복사하여 붙여넣을 때 발생합니다.마이그레이션 자체에서 어레이로 정의됩니다.

이것이 누군가에게 도움이 될 수도 있지만 :-)

내가 너무 늦었는지도 모르지만, 당신은 그것을 하려고 노력했나요?migrations앱에 있는 폴더와__init__.py서류철에 넣을까요?

아마도 이것은 누군가를 도울 것입니다.나는 중첩된 app.project.appname을 사용하고 있었고 실제로 INSTALLED_APPs에 project와 project.appname을 가지고 있었습니다.INSTALLED_APPs에서 프로젝트를 제거하면 변경 사항을 검색할 수 있습니다.

답은 이 스택 오버플로 게시물에 있습니다. cdvv7788 Django 1.7의 마이그레이션입니다.

해당 앱을 처음 마이그레이션하는 경우 다음을 사용해야 합니다.

manage.py 에서 내 앱 이름으로 마이그레이션을 수행하면 다음을 수행할 수 있습니다.

manage.py migrate 만약 당신이 당신의 앱을 데이터베이스에 가지고 있다면, 당신이 아직 그것을 마이그레이션하지 않았을 가능성이 있는 make migration에 대한 변경사항을 업데이트하지 않고 그것의 모델을 수정했습니다.모델을 원래 형태로 다시 변경하고, 첫 번째 명령(앱 이름 포함)을 실행한 후 마이그레이션하면 모델이 위장됩니다.모델의 변경 내용을 원래대로 되돌린 후 마이그레이션을 실행하고 다시 마이그레이션하면 작동합니다.

저는 똑같은 문제를 겪고 있었고 위와 같은 일을 하는 것이 완벽하게 작동했습니다.

저는 django 앱을 cloud9로 옮겼지만 어떤 이유에서인지 초기 마이그레이션을 한 번도 잡지 못했습니다.

다음은 저에게 도움이 되었습니다.

  1. 앱 이름을 설정에 추가합니다.파이의
  2. 'message manage'를 사용합니다.파이크 마이그레이션'
  3. 'message manage'를 사용합니다.파이 마이그레이션'

나를 위해 일했습니다: 파이썬 3.4, 장고 1.10

저처럼 마이그레이션을 좋아하지 않는 사람은 아래 단계를 사용할 수 있습니다.

  1. 동기화할 변경 사항을 제거합니다.
  2. 려달을 합니다.python manage.py makemigrations app_label초기 마이그레이션에 사용됩니다.
  3. 려달을 합니다.python manage.py migrate변경하기 전에 테이블을 만들 수 있습니다.
  4. 첫 번째 단계에서 제거한 변경사항을 붙여넣습니다.
  5. 2. 및 3. 단계를 실행합니다.

이러한 단계 중 하나를 혼동한 경우 마이그레이션 파일을 읽습니다.스키마를 수정하거나 원하지 않는 파일을 제거하도록 변경하지만 다음 마이그레이션 파일의 종속성 부분은 변경하는 것을 잊지 마십시오. ;)

저는 이것이 미래에 누군가에게 도움이 되기를 바랍니다.

은 항확시오십하인을 .settings.py에 시대에INSTALLED_APPS모델이 포함된 모든 앱이 목록에 있는지 확인합니다.

중입니다.makemigrations folder는 에 포함된 모든 앱과 관련된 모든 테이블을 하는 합니다.settings.py프로젝트를 위해. 그것을하면, 당그것을이신일.makemigrations됩니다. (.)makemigrations app_name프로젝트/사이트의 모든 앱에 대해).

마이그레이션으로 식별되지 않는 특정 필드가 있는 경우: 동일한 이름을 가진 속성이 있는지 두 번 확인합니다.

예:

field = django.db.models.CharField(max_length=10, default = '', blank=True, null=True)

# ... later

@property
def field(self):
    pass

를 "이 "수정"으로 .makemigrations

이 방법만이 나에게 도움이 되었기 때문에 이 답변을 추가했습니다.

실행 폴더를 삭제했습니다.makemigrations그리고.migrate.
여전히 다음과 같이 쓰여 있습니다.적용할 마이그레이션이 없습니다.

폴더로 가서 마지막으로 만든 파일을 열었는데,
내가거기에 됨)을 합니다.
그리고 실행migrate한 번

기본적으로 마이그레이션 파일을 수동으로 편집합니다.
파일 내용을 이해하는 경우에만 이 작업을 수행합니다.

이 모델이렇그확인다니합은않지지▁not▁is다▁your니▁sure▁make인▁model가 아닌지 확인합니다.abstract제가 사실 그런 실수를 했고 시간이 좀 걸려서 글을 올려야겠다고 생각했습니다.

사용했습니까?schemamigration my_app --initial이전 마이그레이션 폴더의 이름을 바꾼 후?수도 있어요될 수도 있어요.그렇지 않은 경우 - 데이터베이스를 다시 만들고 syncdb+마이그레이션을 수행합니다.저한테는 효과가 있었어요

이 경우 모델이 정의된 모델 폴더의 _init_.py 파일에 모델을 추가해야 했습니다.

from myapp.models.mymodel import MyModel

로 의폴를실삭다니습의 를 삭제했습니다.migrations내 프로젝트 디렉토리에서.

솔루션은 다음을 만드는 것입니다.__init__.py에 파일을 합니다.migrations에 더고, 그리, 폴,,

python manage.py makemigrations
python manage.py migrate

동일한 문제가 있었습니다. models.py 에서 정의한 클래스가 무엇인지 확인하십시오. 모델을 상속해야 합니다.모델 클래스.

class Product(models.Model):
    title = models.TextField()
    description = models.TextField()
    price = models.TextField()

메이크 마이그레이션을 두 번 실행해야 하는 것과 모든 종류의 이상한 행동에 대해서도 같은 문제가 있었습니다.문제의 근본 원인은 모델에서 기본 날짜를 설정하는 기능을 사용하여 마이그레이션을 실행할 때마다 마이그레이션이 변경 사항을 감지한다는 것이었습니다.이 질문에 대한 대답은 저를 올바른 방향으로 이끌었습니다.날짜 필드를 다시 만드는 마이그레이션 방지

저는 최근에 장고를 1.6에서 1.8로 업그레이드했고 그들을 위한 앱과 마이그레이션이 거의 없었습니다.이랑 난남을사고했용쪽,▁south▁and고사용했▁used▁i,schemamigrationsDjango 1.8에서 삭제된 Django 1.6에서 마이그레이션을 생성합니다.

업그레이드 후 새로운 모델을 추가했을 때makemigrations명령이 변경 사항을 감지하지 못했습니다. @ 답변)가 잘, 초기 마이그레이션(fake migration, @drojf(drojf)을 하지 못했습니다.python manage.py --fake-initial. 제이 이미 만들어졌기 에 이 있었습니다 제 테이블(이전 테이블)이 이미 생성되었기 때문에 이 작업을 수행하고 있었습니다.

으로 이 .py 에서 새 변경한 후 를 삭제백업을 이름 python models.py 을 .manage.py모든 앱에 대해 마이그레이션을 수행한 다음 수행했습니다.python manage.py migrate --fake-initial이것은 매력적으로 작용했습니다.모든 애플리케이션에 대해 초기 마이그레이션을 생성하고 가짜 초기 마이그레이션을 수행한 후 새 모델을 추가하고 정기적인 프로세스를 따릅니다.makemigrations해당 앱에서 마이그레이션할 수 있습니다.이제 변경 사항이 감지되어 모든 것이 정상적으로 진행되었습니다.

누군가가 문제에 서 공유할 .schemamigrations그들의 앱을 위해 남쪽으로), 그것은 그들에게 도움이 될 수 있습니다 :)

그게 누군가를 도울 수 있을지도 몰라요, 저도 같은 문제가 있었어요.

serializer 클래스와 뷰가 있는 테이블을 이미 두 개 만들었습니다.그래서 업데이트를 하려고 할 때 이런 오류가 발생했습니다.

다음 단계를 수행했습니다.

  1. 내가 만든.\manage.py makemigrations app
  2. 는 실했습다를 실행했습니다..\manage.py migrate
  3. 는 제 나는나두테지다웠니습을이블의 를 모두 .models.py
  4. serializer 및 view 클래스에서 테이블에 대한 모든 참조를 지웠습니다.
  5. 스텝을 실행했습니다.1그리고.2.
  6. ▁in▁▁just▁my에서 변경 사항을 했습니다.models.py
  7. 다시 단계를 실행했습니다.5.
  8. 변경 내용을 모두 복원했습니다.

만약 당신이 Pycharm과 함께 일하고 있다면, 지역 역사는 매우 도움이 됩니다.

아마도 이것은 누군가를 도울 것입니다.

는 제 models.py 예상되는 그고예되는상리.makemigrations를 만들다DeleteModel진술들.

파일을 삭제해야 합니다!

./manage makemigrations
./manage migrate

마이그레이션은 DB의 변경사항을 추적하므로 관리되지 않는 것에서 관리되는 것으로 변경하는 경우 데이터베이스 테이블이 처리 중인 모델과 관련된 최신 상태인지 확인해야 합니다.

만약 당신이 여전히 개발 모드에 있다면, 저는 개인적으로 제 IDE 뿐만 아니라 제 모델과 관련된 django_migrations 테이블에서 마이그레이션 파일을 삭제하고 위의 명령을 다시 실행하기로 결정했습니다.

기억: IDE에서는 _001로 끝나는 마이그레이션이 있고 데이터베이스에서는 _003으로 끝나는 마이그레이션이 있는 경우.Django는 업데이트할 항목에 대해 _004로 끝나는 마이그레이션이 있는지만 확인합니다.

2개(코드 & db 마이그레이션)는 연결되어 있으며 동시에 작동합니다.

해피 코딩.

아래 명령을 사용하여 초기 마이그레이션을 위장해야 할 수도 있습니다.

python manage.py migrate --fake-initial
  1. 동기화할 변경 사항을 제거합니다.
  2. python manage를 실행합니다.pymakemigrations app_label for the initial migration.
  3. python manage를 실행합니다.변경하기 전에 테이블을 만들기 위한 py 마이그레이트.
  4. 첫 번째 단계에서 제거한 변경사항을 붙여넣습니다.
  5. 2. 및 3. 단계 실행

위에서 사용할 수 있는 다른 방법이 없기 때문에 이 답변을 추가했습니다.

제 경우에는 더 이상한 일이 일어나고 있었습니다(Django 1.7 버전). 제 models.py 에서는 파일 끝에 "flock" 줄이 있었고(빈 줄이었습니다), 그리고 실행했을 때python manage.py makemigrations명령 결과: "변경 사항이 감지되지 않음"입니다.

이 문제를 해결하기 위해 models.py 파일 끝에 있던 이 "공백"을 삭제하고 명령을 다시 실행했습니다. 모든 것이 수정되었고 models.py 에 대한 모든 변경 사항이 감지되었습니다!

먼저 이 솔루션은 herku 서버에 배포하는 동안 동일한 문제에 직면한 사람들에게 적용됩니다. 저는 동일한 문제에 직면했습니다.

배포하려면 django_heroku를 추가해야 하는 필수 단계가 있습니다.settings(설정)를 settings.py 파일에 포함합니다.

변경 사항:위의 줄을 django_heroku로 바꿨을 때.설정(임의의 데이터베이스)=거짓), 완벽하게 작동했습니다.

이 문제가 발생했습니다. 명령입니다.

python manage.py makemigrations

파일에 변경 사항을 저장한 후 함께 작업했습니다.

원인 중 하나는 admin.py 파일에 모델을 등록하지 않았기 때문일 수 있습니다.먼저 admin.py 파일에 모델을 등록한 후 마이그레이션을 수행합니다.

언급URL : https://stackoverflow.com/questions/24912173/django-1-7-makemigrations-not-detecting-changes

반응형