django.db.migrations.exceptions.InconsistentMigrationHistory


85

python manage.py migrateDjango 프로젝트에서 실행할 때 다음 오류가 발생합니다.

Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/hari/project/env/local/lib/python2.7/site-     packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle
executor.loader.check_consistent_history(connection)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history
connection.alias,
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.

다음과 같은 사용자 모델이 있습니다.

class User(AbstractUser):
    place = models.CharField(max_length=64, null=True, blank=True)
    address = models.CharField(max_length=128, null=True, blank=True)

이 문제를 어떻게 해결할 수 있습니까?


4
우선 다음 실행 마이그레이션 init.py를 제외시켰다 폴더 마이그레이션에서 모든 파일을 삭제, 데이터베이스에서 모든 테이블을 삭제
Exprator

모든 테이블을 삭제하는 방법?
Hari Krishnan

어떤 DB를 사용하고 있습니까?
Exprator

야아. 나는 그것을 삭제했고 지금은 작동하고 있습니다.
Hari Krishnan

나에게 문제는에 의존하는 마이그레이션이 있었기 때문입니다 'ipn', '__latest__'. 에 적용된 순서 또는 마이그레이션을 확인한 select * from django_migrations다음에 __latest__의해 변경 되어 'ipn', '0007_auto_20160219_1135'문제가 해결 되었습니다 .
Ruben Alves

답변:


47

데이터베이스의 django_migrations 테이블이 불일치의 원인이며 로컬 경로에서 모든 마이그레이션을 삭제해도 작동하지 않습니다.

데이터베이스에서 django_migrations 테이블을 자른 다음 마이그레이션을 다시 적용해야합니다. 작동해야하지만 그렇지 않으면 makemigrations를 다시 실행 한 다음 마이그레이션합니다.

참고 : 데이터를 백업하는 것을 잊지 마십시오.


5
작동하지 않았습니다. 마이그레이션을 시도했을 때 관계가 이미 존재한다고 불평했습니다. 다음 명령으로 django_migrations 테이블을자를 수 있습니다.> python manage.py shell```from django.db import connection cursor = connection.cursor () cursor.execute ( "TRUNCATE TABLE django_migrations")```그리고 다음을 볼 수 있습니다. 마이그레이션 테이블은 다음과 같습니다.```from django.db.migrations.recorder import MigrationRecorder MigrationRecorder.Migration.objects.all ()```
Almenon

2
이것은 데이터 손실 가능성이 높은 끔찍한 아이디어입니다. 아래 내 대답을 참조하십시오.
tbm

107

사용자 정의 사용자 모델을 사용하고 있으므로 먼저 주석을 달 수 있습니다.

INSTALLED_APPS = [
...
#'django.contrib.admin',
...
]

Installed_Apps 설정에서. 그런 다음 실행

python manage.py migrate.

완료되면 주석 해제

'django.contrib.admin'

예, 이것은 내 문제를 해결했습니다! 기본 사용자 모델을 Abstract User 모델로 변경했으며 모든 마이그레이션 후에 오류가 발생했습니다. 그러나 이것을 시도했을 때 내 문제가 해결되었습니다!
mevaka

29
나를 위해 작동하지 않습니다. 오류 메시지는 "관리자 레이블이있는 앱을 설치하지 않음"입니다. 먼저 마이그레이션에서 모든 파일을 삭제해야합니까? 누구든지 그것을 해결하는 방법을 알고 있습니까? 감사합니다 ~
Deft-pawN

2
아래에서 user9414732 답변을 확인하십시오.
Rexcirus

16
urls.py의 주석 경로 ( 'admin /', admin.site.urls)를 잊지 마세요
Vladimir

72

이 페이지에있는 대부분의 답변으로 문제를 해결하는 것으로 시작하겠습니다.

당신은 결코 없다 제대로 장고의 마이그레이션 시스템을 사용하는 경우 데이터베이스를 삭제하고 당신이 해야 결코 삭제 마이그레이션 그들은 comitted되면

이제 최상의 솔루션은 Django 사용 경험, 마이그레이션 시스템에 대한 이해 수준, 데이터베이스의 데이터 가치 등 여러 요소에 따라 달라집니다.

간단히 말해서 마이그레이션 오류를 해결할 수있는 두 가지 방법이 있습니다.

  1. 테이크 옵션을 선택합니다. 경고 : 혼자 작업하는 경우에만 선택할 수 있습니다. 다른 사람이 기존 마이그레이션에 의존하는 경우 삭제할 수 없습니다 .

    • 모든 마이그레이션을 삭제하고 python3 -m manage makemigrations. 이렇게하면 마이그레이션에서 종속성 또는 불일치로 인해 발생한 모든 문제가 제거됩니다.
    • 전체 데이터베이스를 삭제하십시오. 이렇게하면 실제 데이터베이스 스키마와 마이그레이션 기록을 기반으로해야하는 스키마간에 발생했던 불일치 문제가 제거되고 마이그레이션 기록과 이전 마이그레이션 파일 사이의 불일치 문제가 제거됩니다. 에 InconsistentMigrationHistory대해 불평하고 있습니다].
    • 다음을 사용하여 데이터베이스 스키마를 다시 만듭니다. python3 -m manage migrate
  2. 오류의 원인을 확인하고 해결하십시오. (경험을 통해 말하면) 원인은 거의 확실히 당신 이 어리석은 일이기 때문 입니다. (일반적으로 마이그레이션 시스템을 올바르게 사용하는 방법을 이해하지 못한 결과). 내가 야기한 오류에 따라 세 가지 범주가 있습니다.

    1. 마이그레이션 파일과 불일치. 이것은 여러 사람이 한 프로젝트에서 작업 할 때 매우 일반적입니다. 변경 사항이 충돌하지 않고이 makemigrations --merge문제를 해결할 수 있기를 바랍니다 . 그렇지 않으면 누군가이 문제를 해결하기 위해 마이그레이션을 분기 지점으로 롤백해야합니다.
    2. 스키마와 마이그레이션 기록 사이의 불일치. 이를 관리하기 위해 누군가 데이터베이스 스키마를 수동으로 편집하거나 마이그레이션을 삭제해야합니다. 마이그레이션을 삭제 한 경우 변경 사항을 되돌리고 소리를 지르십시오. 다른 사람이 마이그레이션에 의존하는 경우 마이그레이션을 삭제 해서는 안됩니다 . 데이터베이스 스키마를 수동으로 편집 한 경우 변경 사항을 되 돌린 다음 소리를 지르십시오. Django는 데이터베이스 스키마를 관리하고 있습니다.
    3. 마이그레이션 기록과 마이그레이션 파일 간의 불일치. [이것이 InconsistentMigrationHistory질문자가 겪는 문제이고 내가이 페이지에 도착했을 때 겪었던 문제입니다]. 이를 관리하기 위해 누군가가 수동으로 django_migrations테이블을 엉망으로 만들 거나 적용된 마이그레이션 삭제했습니다 . 이 문제를 해결하려면 불일치가 어떻게 발생했는지 파악하고 수동으로 해결해야합니다. 데이터베이스 스키마가 올 바르고 마이그레이션 기록이 잘못된 경우 django_migrations테이블을 수동으로 편집 하여이 문제를 해결할 수 있습니다 . 데이터베이스 스키마가 잘못된 경우 수동으로 편집하여 있어야하는 것과 일치해야합니다.

문제에 대한 설명과 선택한 답변에 따라 혼자 작업하고 있으며 Django를 처음 사용하며 데이터에 신경 쓰지 않는다고 가정하겠습니다. 따라서 핵 옵션이 귀하에게 적합 할 수 있습니다.

이 상황이 아니고 위의 텍스트가 횡설수설처럼 보인다면 Django 사용자의 메일 링리스트 에 도움을 요청하는 것이 좋습니다 . 당신이 처한 특정 문제를 해결하는 데 도움을 줄 수있는 매우 도움이되는 사람들이 있습니다.

믿음을 가지세요. 핵을 사용하지 않고도이 오류를 해결할 수 있습니다!


1
관심있는 사람들을 위해 : 제 경우에는 동료가 사용자 지정 마이그레이션을 완료하여 앱 A에서 앱 B로 테이블을 이동하는 동안 기다리는 동안 앱 B에서 테이블을 생성하는 임시 마이그레이션을 만들었습니다. 동료가 작업을 마치면 임시 마이그레이션을 수행하고 마이그레이션을 적용했습니다. Bam 오류. 임시 마이그레이션을 적용하지 않았을뿐만 아니라 임시 마이그레이션의 이름을 실제 마이그레이션과 동일하게 지정했습니다. 마이그레이션 시스템에 앱 A의 0001_initial마이그레이션에 의존하는 앱 B의 00XX_auto마이그레이션은 어떻게 든 종속성 이전에 적용되었습니다!
Airs

2
끔찍한 소리처럼 쉽게 해결할 수있었습니다. 내 데이터베이스에 올바른 스키마가 있었기 때문에 내가해야 할 일은 테이블 에 수동으로 추가 'A' '00XX_auto'하는 django_migrations것이 었습니다. 내 기록은 해당 마이그레이션의 변경 사항이 적용되었음을 반영했습니다. 복잡하지만 문제를 해결하면 그렇게 어렵지는 않습니다.
Airs

당신은 당신이 삭제해야, 마이그레이션을 삭제할 수 없습니다 pycache을 너무
JonPizza

저는 장고가 아닌 초기 데이터 테이블이 많기 때문에이 피클에 들어갔 기 때문에 대부분의 모델이 포함 managed = False되었습니다. ORM이 작업을 수행하고 테스트를 실행하는 방법으로 관리되는 모델로 이동하기로 결정했을 때 모든 "재미"가 시작되었습니다.
cjm

팀이 0001에서 0230까지 또는 수백 개의 마이그레이션을 스쿼시하기로 결정한 경우 마이그레이션을 절대적으로 삭제 해야 합니다. 스쿼시 된 마이그레이션을 커밋하고 CI / CD가 적용될 때까지 기다린 다음 prod가 완전히 따라 잡으면 삭제합니다. 원래 0001 _... ~ 0230 _... 파일은 더 이상 아무것도하지 않기 때문에 스쿼시 마이그레이션을 다시 업데이트하여 더 이상 replaces아무 말도 하지 않습니다 . 오래된 마이그레이션을 유지하는 것은 누군가가 많은 0002 마이그레이션 중 실제 마이그레이션을 파악해야 할 때만 팀의 개발 생활을 지옥으로 만들 것입니다.
Mike 'Pomax'Kamermans

37

이 문제를 올바르게 해결하는 방법.

프로젝트 내의 마이그레이션 폴더에서 다음 단계를 따르십시오.

  1. _pycache_ 및 0001_initial 파일을 삭제하십시오.
  2. 루트 디렉토리에서 db.sqlite3를 삭제합니다 (모든 데이터가 없어 지도록주의하십시오).
  3. 터미널에서 실행 :
      python manage.py makemigrations
      python manage.py migrate

짜잔.


1
삭제를 원하지 않고 프로덕션 모드에 있으면 어떻게하나요? 또한 나는 사용하지 않고 sqllite, 우리 서버의 MySQL입니다. 데이터 손실없이 더 나은 방법은 무엇입니까?
Bishwas Bhandari 2010

33

이것은 django 문서의 권장 사항에 따라 사용자 지정 사용자 모델을 추가 한 후 새 프로젝트에서 나에게 발생했습니다.

새 프로젝트를 시작하는 경우 기본 사용자 모델이 충분하더라도 사용자 지정 사용자 모델을 설정하는 것이 좋습니다.

문제를 해결하기 위해 제가 한 일이 있습니다.

  1. db.sqlite3 데이터베이스를 삭제합니다.
  2. 앱 / 마이그레이션 폴더를 삭제합니다.

@jackson에 따라 django.contrib.admin을 임시로 주석 처리하십시오.

INSTALLED_APPS = [
...
#‘django.contrib.admin’,
...
]

또한 urls.py에서 관리 사이트를 주석 처리하십시오.

urlpatterns = [
    path('profile/', include('restapp.urls')),
    #path('admin/', admin.site.urls),
]

경로 ( 'admin /')를 주석 처리하지 않으면 실행시 "LookupError : No installed app with label 'admin'"오류가 발생합니다.

python manage.py migrate

마이그레이션이 완료되면 위의 두 가지 주석을 모두 제거하십시오.


26

문제

django.db.migrations.exceptions.InconsistentMigrationHistory : 마이그레이션 admin.0001_initial이 해당 종속성 account.0001_initial 데이터베이스 'default'보다 먼저 적용됩니다.

따라서 먼저 admin (admin.0001_initial)없이 데이터베이스를 마이그레이션 할 수 있습니다.

종속성이 마이그레이션 된 후 명령을 실행하여 admin.0001_initial.

해결책

  1. settings.py의 INSTALLED_APPS에서 'django.contrib.admin'을 제거하십시오.
  2. 명령 실행 :

Python manage.py makemigrations appname

Python manage.py 마이그레이션 앱 이름

  1. settings.py 파일의 INSTALLED_APPS에 'django.contrib.admin'을 추가하십시오.
  2. 명령을 다시 실행하십시오.

Python manage.py makemigrations appname

Python manage.py 마이그레이션 앱 이름


7
나에 makemigrations 결과를 INSTALLED_APPS에서 'django.contrib.admin'을 제거하고 실행LookupError: No installed app with label 'admin'.
인 Szymon Przedwojski

4
관리자와 URL을 urls.py를하고 주석로 이동
가우 탐 쿠마에게

2

sqlite 파일을 삭제하거나 databse 'python manage.py flush'를 플러시 한 다음 makemigrations 및 migrate 명령을 각각 실행하십시오.


2

새 Django 프로젝트를 만들고 실행할 때

python manage.py 마이그레이션

Django는 기본적으로 1 개의 auth_user 테이블과 auth_user로 시작하는 2 개의 테이블을 포함하여 10 개의 테이블을 생성합니다.

AbstractUser에서 상속 된 사용자 정의 사용자 모델을 만들려면 다음과 같은 오류 메시지와 함께이 문제가 발생합니다.

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.

전체 데이터베이스를 삭제하여이 문제를 해결하고 새 데이터베이스를 만듭니다. 그리고 이것은 제가 언급 한 세 개의 테이블을 대체했습니다.


2
좋아요, 데이터베이스를 삭제하고 싶지 않으면 어떻게하나요? 사용 가능한 솔루션이 있습니까?
Iulian Pinzaru

2

다른 단계를 수행하기 전에 데이터베이스를 백업하십시오. 그런 다음 다시 백업하십시오.

사용자 지정 사용자 모델 코드를 제거하고 설정에서 사용자 지정 모델 및 앱을 비활성화 한 다음 :

python manage.py dumpdata auth --natural-primary --natural-foreign > auth.json
python manage.py migrate auth zero  # This will also revert out the admin migrations

그런 다음 사용자 지정 모델을 추가하고 설정에서 설정 한 다음 앱을 다시 활성화합니다. 이 앱에 아직 이전이 없는지 확인하세요.

그때:

python manage.py makemigrations <your-app>
python manage.py migrate
python manage.py loaddata auth.json  # Assumes your user-model isn't TOO dissimilar to the standard one.

끝난!


2

settings.py에서 마이그레이션하기 전에이 작업을 주석으로 해결 'django.contrib.admin' 하고, urls.py에서 ('admin/', admin.site.urls). 마이그레이션 후 주석 해제


스크립트 형식의 포스트 코드 (대체)와 각 블록이 시작되는 맨 위에는 스크립트를 나타내는 파일 이름으로 시작됩니다. 답변을 게시 한 방법이 혼란 스럽습니다.
ZF007

@ ZF007 혼동을 드려 죄송합니다. 저는 StackOverflow를
처음 접했기

1

먼저 모든 마이그레이션 및 db.sqlite3 파일을 삭제하고 다음 단계를 따르십시오.

$ ./manage.py makemigrations myapp 
$ ./manage.py squashmigrations myapp 0001(may be differ)

이전 마이그레이션 파일을 삭제하고 마지막으로.

$ ./manage.py migrate

1

귀하의 오류는 본질적으로 다음과 같습니다.

Migration "B" is applied before its dependency "A" on database 'default'.

위생 점검 : 먼저 데이터베이스를 열고 'django_migrations'테이블의 레코드를 확인합니다. 기록은 연대기 순서 (예 : A, B, C, D ...)로 나열되어야합니다.

오류에 나열된 "A"마이그레이션의 이름이 데이터베이스에 나열된 "A"마이그레이션의 이름과 일치하는지 확인하십시오. (이전에 수동, 편집, 삭제 또는 마이그레이션 파일의 이름을 변경 한 경우에는 다를 수 있습니다.)

이 문제를 해결하려면 데이터베이스에서 마이그레이션 A.의 이름을 바꾸거나 파일 이름을 바꿉니다. 그러나 변경 사항이 팀의 다른 개발자가 데이터베이스에있는 것과 일치하는지 확인하십시오 (또는 변경 사항이 프로덕션 데이터베이스의 것과 일치하는지).


1

빈 데이터베이스에서 작업하는 경우 빠른 수정은 다른 앱 마이그레이션 전에 계정 앱에 대한 마이그레이션을 실행할 수 있습니다 .

$ ./manage.py migrate account

그리고:

$ ./manage.py migrate

1

순서가 INSTALLED_APPS중요해 보입니다. 최근 작업을 항상 목록의 맨 위 / 시작에 넣으면 django.contrib.admin과 관련하여 항상 올바르게로드됩니다. 내 작품을 INSTALLED_APPS목록 의 시작 부분으로 옮기면 이 문제가 해결되었습니다. Kun Shi의 솔루션이 효과가 있었던 이유는 마이그레이션을 다른 순서로 실행했을 수 있습니다.


0

표준 대신 자신의 사용자 모델을 만들려고 시도하는 동안 예외가 드러났다면 해당 지침
을 따라 단계별로 문제가 해결되었음을 발견했습니다.

  1. auth.User와 동일한 사용자 정의 사용자 모델을 만들고 User (너무 많은 테이블이 동일한 이름을 유지함)라고 부르고 db_table = 'auth_user'를 설정합니다 (동일한 테이블을 사용함).
  2. 모든 마이그레이션을 버리십시오.
  3. 새로운 마이그레이션 집합 다시 만들기
  4. 닭 한 마리를 희생하십시오. 불안하면 두 마리 정도면됩니다. 또한 데이터베이스의 백업을 만드십시오.
  5. django_migrations 테이블 자르기
  6. 새로운 마이그레이션 집합 가짜 적용
  7. db_table 설정 해제, 사용자 지정 모델에 대한 기타 변경, 마이그레이션 생성, 적용

외래 키 제약 조건을 적용하는 데이터베이스에서이 작업을 수행하는 것이 좋습니다. 랩톱의 SQLite에서 이것을 시도하지 말고 서버의 Postgres에서 작동 할 것으로 기대하십시오!


링크 된 기사의 요약이나 인용문을 답변에 추가 할 수 있습니까?
Collin M. Barrett

0

당신은 설정하면 AUTH_USER_MODE 에 L을 settings.py 다음과 같습니다 :

AUTH_USER_MODEL = 'custom_user_app_name.User'

makemigrationmigrate 명령을 실행하기 전에이 줄을 주석 처리해야 합니다. 그런 다음이 줄의 주석 처리를 다시 제거 할 수 있습니다.


3
불행히도 이로 인해 오류가 발생합니다. 예 :accounts.CustomUser.groups: (fields.E304) Reverse accessor for 'CustomUser.groups' clashes with reverse accessor for 'User.groups'. HINT: Add or change a related_name argument to the definition for 'CustomUser.groups' or 'User.groups'.
Szymon Przedwojski

0

앱없이 새 프로젝트를 만들 때

python manage.py migrate

Django는 기본적으로 10 개의 테이블을 생성합니다.

AbstractUser그 이후 상속되는 고객 사용자 모델을 생성 하려면 다음 메시지와 같이이 문제가 발생합니다.

django.db.migrations.exceptions.InconsistentMigrationHistory : 마이그레이션 admin.0001_initial이 해당 종속성 account.0001_initial 데이터베이스 'default'보다 먼저 적용됩니다.

마지막으로 전체 데이터베이스를 삭제하고


0

Wagtail 2.0에서 2.4로 마이그레이션 할 때이 문제가 발생했지만 타사 앱이 현재 버전 이후 마이그레이션 하려는 버전 이전에 마이그레이션 스쿼시하는 경우를 몇 번 더 보았습니다 .

이 경우 놀랍도록 간단한 해결책은 적어도 다음과 같습니다.

./manage.py migrate
./manage.py makemigrations
./manage.py migrate

즉, 마이그레이션을 시도하기 전에 단일 마이그레이션을 실행합니다.


0

이런 종류의 문제로 이어질 수있는 사용자 오류 외에 또 다른 이유가 있습니다 . 스쿼시 마이그레이션 과 관련하여 Django의 알려진 문제입니다 .

Python 2.7 + Django 1.11에서 완벽하게 작동하는 일련의 마이그레이션이 있습니다. 달리기 makemigrations또는migrate데이터베이스가 새로 생성 된 경우에도 항상 정상적으로 작동합니다.

그러나 프로젝트를 Python 3.6 (현재 동일한 Django 1.11 사용)으로 이동하면서 동일한 마이그레이션이 처음 실행될 때만 제대로 적용되는 이유를 파악하려고 노력했습니다. 그 후 실행을 시도 makemigrations하거나 migrate오류가 발생합니다.

django.db.migrations.exceptions.InconsistentMigrationHistory

여기서 마이그레이션 foo.0040-thing은 종속성 이전 에 적용됩니다 foo.0038-something-squashed-0039-somethingelse(단 하나의 스쿼시 마이그레이션 만 있습니다 ... 나머지는 훨씬 더 간단합니다).

한동안 저를 괴롭혔던 것은 이것이 파이썬 3에서만 발생하는 이유입니다. DB가 정말로 일관성이 없다면 이것은 항상 일어나야합니다. 마이그레이션이 처음 적용될 때 완벽하게 잘 작동하는 것처럼 보이는 것은 똑같이 혼란 스러웠습니다.

(현재 Q & A 스레드 포함) 많은 검색 끝에 앞서 언급 한 Django 버그 보고서를 우연히 발견했습니다 . 스쿼시 마이그레이션은 실제로 줄에 b접두사를 사용했습니다 replaces(예 :replaces = [(b'', 'foo.0038-defunct'),.......]

줄 에서 b접두사를 제거하면 replaces모두 정상적으로 작동했습니다.


0

이 문제는 초기 마이그레이션 후 사용자 모델을 확장하는 경우 대부분 발생합니다. Abstract 사용자를 확장 할 때마다 email, first_name 등과 같은 모델에 존재하는 기본 필드가 생성되기 때문입니다.

이것은 django의 모든 추상 모델에 적용 할 수 있습니다.

따라서이를위한 매우 간단한 해결책은 새 데이터베이스를 만든 다음 마이그레이션을 적용하거나 [이 경우 모든 데이터가 삭제됩니다.] 동일한 데이터베이스를 삭제 하고 마이그레이션을 다시 적용하는 것입니다.


0

먼저 데이터를 백업하십시오. (db 파일 복사).

sqlite.db 및 마이그레이션 폴더도 삭제합니다 .

그런 다음 다음 명령을 실행하십시오.

./manage.py makemigrations APP_NAME
./manage.py migrate APP_NAME

DB 파일 및 마이그레이션 폴더를 삭제 한 후 마이그레이션 명령 후 응용 프로그램 이름을 작성하십시오.


0

좋아, 이상하거나 핵무기 한 일을하기 전에 먼저 데이터베이스를 삭제하고 다시 빌드하십시오.

POsgres를 사용하는 경우-

DROP SCHEMA public CASCADE;
CREATE SCHEMA PUBLIC;

그런 다음 마이그레이션을 다시 수행하십시오.

./manage.py migrate

이것은 일반적으로 문제를 해결하는 가장 기본적인 솔루션입니다. 절대적으로 필요할 때까지 마이그레이션을 다시 수행하지 마십시오.


4
"이상하거나 핵무기"한 다음 "먼저 데이터베이스를 삭제하고 재 구축"합니다. 데이터베이스를 삭제하는 것이 핵으로 간주되지 않는다면 무엇이 있는지보고 싶지 않습니다.
tbm

0

내 데이터베이스를 삭제 한 다음 makemigrations를 실행하고이 문제를 해결하려면 다시 마이그레이션해야합니다.


0

마이그레이션 폴더와 db.sqlite3을 삭제하고 cmd python manage.py makemigrations를 입력하십시오.


1
이렇게하면 문제가 해결 될 수 있지만 문제가 해결되는 이유에 대한 정보를 제공해 주시겠습니까?
bob0the0mighty

u는 이미 구조와 SQL 데이터베이스와 거기에 일부 데이터를 생성하고 u는 UR 데이터를 터치 UR 모델을 수정할 수있는 몇 가지 변경을 할 때 오류 runder 사촌
moncef banouri

0

django.db.migrations.exceptions.InconsistentMigrationHistory # 맞춤 사용자 모델 생성

나는 오늘 같은 문제가 있었고 위의 솔루션 중 어느 것도 작동하지 않았으며 다음 명령을 사용하여 로컬 PostgreSQL 데이터베이스에서 모든 데이터를 지우려고 생각했습니다.

-- Drop everything from the PostgreSQL database.

DO $$
DECLARE
        q TEXT;
        r RECORD;
BEGIN
        -- triggers
        FOR r IN (SELECT pns.nspname, pc.relname, pt.tgname
                FROM pg_catalog.pg_trigger pt, pg_catalog.pg_class pc, pg_catalog.pg_namespace pns
                WHERE pns.oid=pc.relnamespace AND pc.oid=pt.tgrelid
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pt.tgisinternal=false
            ) LOOP
                EXECUTE format('DROP TRIGGER %I ON %I.%I;',
                    r.tgname, r.nspname, r.relname);
        END LOOP;
        -- constraints #1: foreign key
        FOR r IN (SELECT pns.nspname, pc.relname, pcon.conname
                FROM pg_catalog.pg_constraint pcon, pg_catalog.pg_class pc, pg_catalog.pg_namespace pns
                WHERE pns.oid=pc.relnamespace AND pc.oid=pcon.conrelid
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pcon.contype='f'
            ) LOOP
                EXECUTE format('ALTER TABLE ONLY %I.%I DROP CONSTRAINT %I;',
                    r.nspname, r.relname, r.conname);
        END LOOP;
        -- constraints #2: the rest
        FOR r IN (SELECT pns.nspname, pc.relname, pcon.conname
                FROM pg_catalog.pg_constraint pcon, pg_catalog.pg_class pc, pg_catalog.pg_namespace pns
                WHERE pns.oid=pc.relnamespace AND pc.oid=pcon.conrelid
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pcon.contype<>'f'
            ) LOOP
                EXECUTE format('ALTER TABLE ONLY %I.%I DROP CONSTRAINT %I;',
                    r.nspname, r.relname, r.conname);
        END LOOP;
        -- indicēs
        FOR r IN (SELECT pns.nspname, pc.relname
                FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pns
                WHERE pns.oid=pc.relnamespace
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pc.relkind='i'
            ) LOOP
                EXECUTE format('DROP INDEX %I.%I;',
                    r.nspname, r.relname);
        END LOOP;
        -- normal and materialised views
        FOR r IN (SELECT pns.nspname, pc.relname
                FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pns
                WHERE pns.oid=pc.relnamespace
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pc.relkind IN ('v', 'm')
            ) LOOP
                EXECUTE format('DROP VIEW %I.%I;',
                    r.nspname, r.relname);
        END LOOP;
        -- tables
        FOR r IN (SELECT pns.nspname, pc.relname
                FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pns
                WHERE pns.oid=pc.relnamespace
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pc.relkind='r'
            ) LOOP
                EXECUTE format('DROP TABLE %I.%I;',
                    r.nspname, r.relname);
        END LOOP;
        -- sequences
        FOR r IN (SELECT pns.nspname, pc.relname
                FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pns
                WHERE pns.oid=pc.relnamespace
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pc.relkind='S'
            ) LOOP
                EXECUTE format('DROP SEQUENCE %I.%I;',
                    r.nspname, r.relname);
        END LOOP;
        -- extensions (only if necessary; keep them normally)
        FOR r IN (SELECT pns.nspname, pe.extname
                FROM pg_catalog.pg_extension pe, pg_catalog.pg_namespace pns
                WHERE pns.oid=pe.extnamespace
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
            ) LOOP
                EXECUTE format('DROP EXTENSION %I;', r.extname);
        END LOOP;
        -- aggregate functions first (because they depend on other functions)
        FOR r IN (SELECT pns.nspname, pp.proname, pp.oid
                FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pns, pg_catalog.pg_aggregate pagg
                WHERE pns.oid=pp.pronamespace
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pagg.aggfnoid=pp.oid
            ) LOOP
                EXECUTE format('DROP AGGREGATE %I.%I(%s);',
                    r.nspname, r.proname,
                    pg_get_function_identity_arguments(r.oid));
        END LOOP;
        -- routines (functions, aggregate functions, procedures, window functions)
        IF EXISTS (SELECT * FROM pg_catalog.pg_attribute
                WHERE attrelid='pg_catalog.pg_proc'::regclass
                    AND attname='prokind' -- PostgreSQL 11+
            ) THEN
                q := 'CASE pp.prokind
                        WHEN ''p'' THEN ''PROCEDURE''
                        WHEN ''a'' THEN ''AGGREGATE''
                        ELSE ''FUNCTION''
                    END';
        ELSIF EXISTS (SELECT * FROM pg_catalog.pg_attribute
                WHERE attrelid='pg_catalog.pg_proc'::regclass
                    AND attname='proisagg' -- PostgreSQL ≤10
            ) THEN
                q := 'CASE pp.proisagg
                        WHEN true THEN ''AGGREGATE''
                        ELSE ''FUNCTION''
                    END';
        ELSE
                q := '''FUNCTION''';
        END IF;
        FOR r IN EXECUTE 'SELECT pns.nspname, pp.proname, pp.oid, ' || q || ' AS pt
                FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pns
                WHERE pns.oid=pp.pronamespace
                    AND pns.nspname NOT IN (''information_schema'', ''pg_catalog'', ''pg_toast'')
            ' LOOP
                EXECUTE format('DROP %s %I.%I(%s);', r.pt,
                    r.nspname, r.proname,
                    pg_get_function_identity_arguments(r.oid));
        END LOOP;
        -- nōn-default schemata we own; assume to be run by a not-superuser
        FOR r IN (SELECT pns.nspname
                FROM pg_catalog.pg_namespace pns, pg_catalog.pg_roles pr
                WHERE pr.oid=pns.nspowner
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast', 'public')
                    AND pr.rolname=current_user
            ) LOOP
                EXECUTE format('DROP SCHEMA %I;', r.nspname);
        END LOOP;
        -- voilà
        RAISE NOTICE 'Database cleared!';
END; $$;

그런 다음 마이그레이션을 위해 django 명령을 실행할 수 있습니다.

python manage.py makemigrations
python manage.py migrate

그리고 당연히 작동 할 것입니다. 감사합니다.


0

설치된 앱에서 django.contrib.admin을 주석 처리하고 경로 ( 'admin /', admin.site.urls)를 주석 처리 한 다음 makemigrations를 다시 실행 한 다음 마이그레이션합니다. 그것은 당신의 문제를 해결할 것입니다. 자세한 내용은 여기 로 이동


1
몇 가지 팁 : 이미 존재하는 답변을 복제하지 마십시오. 이미 선택한 솔루션이있는 것 같습니다. 답변이 다른 경우 이유를 자세히 설명하고 가능하면 자세한 정보를 제공하세요. 예를 들어, django.contrib.admin에 대한 주석 논리는 무엇입니까 (또한 주석 처리를 의미합니까?). 마이그레이션을 다시 실행하는 이유는 무엇입니까?
Jairus Martin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.