programing

Django - make migrations - 변경된 내용이 없습니다.

projobs 2022. 10. 11. 21:59
반응형

Django - make migrations - 변경된 내용이 없습니다.

make migrations 명령을 사용하여 기존 앱 내에서 마이그레이션을 생성하려고 했지만 "No changes detected"로 출력됩니다.

는 보통 '어플리케이션'을 을 만듭니다.startapp명령어를 생성했을 때 이 앱에 사용하지 않았습니다.

디버깅을 실시한 , 되지 않는 알 수 을 위해서가 아닙니다.이거는 이 서비스가migrations앱에 패키지/폴더가 없습니다.

폴더가 없는 경우 폴더를 만드는 것이 좋습니까, 아니면 부족한 것이 있으면 좋습니까?

하려면 를 합니다.makemigrations을 사용하다마이그레이션 폴더가 생성됩니다.

./manage.py makemigrations <myapp>

은 반드시 에 .INSTALLED_APPS아아아아아아아아아아아아아아아아아.py ★★★★★★★★★★★★★★★★」

나의 문제(솔루션 등)는 위에서 설명한 것과 아직 달랐다.

하지 않았습니다.models.py했습니다.models"" 가 되어 .my_model.py내 모델을 넣어둔 곳에 보관해 두죠장고가 내 모델을 찾을 수 없어서 적용할 마이그레이션이 없다고 써있었어요.

과 같습니다.my_app/models/__init__.py: 이은 제가 추가한 것입니다.from .my_model import MyModel

가 django의 원인은 .makemigrations명령어를 입력합니다.

  1. 마이그레이션 폴더 앱에 마이그레이션 패키지가 필요합니다.
  2. 인스톨 완료_APPS 앱이 다음에서 지정되어야 합니다.INSTALLED_APPS.syslog(영어)
  3. 장황함은 실행부터 시작됩니다.makemigrations -v 3.이것으로 문제가 밝혀질지도 모릅니다.
  4. 전체 경로 입력INSTALLED_APPS전체 모듈 앱 구성 경로 'path'를 지정하는 것이 좋습니다.MyAppConfig'
  5. --delays 올바른 설정 파일이 설정되어 있는지 확인하는 것이 좋습니다.manage.py makemigrations --settings mysite.settings
  6. 이름 지정 - 앱 이름만 명시적으로 입력 - 앱에 대한 마이그레이션 범위를 좁히고 문제를 격리하는 데 도움이 됩니다.
  7. 모델 메타 검사 권한이 있습니다.app_label meta 델 in in in in in in in in

  8. debug django debug django core script.make migrations 명령어는 거의 간단합니다.벽난로에서 하는 방법은 다음과 같습니다.스크립트 정의를 적절히 변경합니다(예:makemigrations --traceback myapp)

다중 데이터베이스:

  • django db 라우터를 사용하는 경우 라우터 클래스(커스텀라우터 클래스)는 다음 명령어를 구현해야 합니다.allow_syncdb★★★★★★ 。

make migrations는 항상 모델 변경을 위해 이행을 작성하지만 allow_migrate()가 False를 반환하면

이에 대한 실행해 . 단순하게 실행하라는 내용입니다.makemigrations문제가 있었다.Meta모델 서브클래스

있습니다.label = <app name> (the (the)에서)apps.py 옆에models.py,views.py메타 클래스에 앱 라벨과 같은 라벨이 없는 경우(예를 들어 너무 큰 앱을 여러 개로 분할하는 경우), 변경은 검출되지 않습니다(또한 도움이 되는 에러 메시지는 전혀 표시되지 않습니다).그래서 모델 수업에는 다음과 같은 것이 있습니다.

class ModelClassName(models.Model):

    class Meta:
        app_label = '<app name>' # <-- this label was wrong before.

    field_name = models.FloatField()
    ...

여기서 장고 1.10을 실행하고 있습니다.

이 문제를 일으키는 또 다른 원인은 필드 뒤에 오는 쉼표로, make migration 중에 필드를 건너뜁니다.

class MyModel(models.Model):
    name = models.CharField(max_length=64, null=True)  # works
    language_code = models.CharField(max_length=2, default='en')  # works
    is_dumb = models.BooleanField(default=False),  # doesn't work

,이데올로기 때문에is_dumb./manage.py makemigrations왜냐하면 Python은 그것이 태플이라고 생각하고, Django는 그것을 필드라고 생각하지 않기 때문이다.

그것은 댓글이지만 아마 답이 될 것이다.

pypy pyINSTALLED_APPS그렇지 않으면 어떤 작업을 수행해도 마이그레이션이 실행되지 않습니다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'blog',
]

그런 다음 실행합니다.

./manage.py makemigrations blog
  1. 설정의 installed_apps에 앱이 표시되어 있는지 확인합니다.화이
  2. 모형 클래스가 모형을 확장하는지 확인하십시오.모델

나의 문제는 위의 답변보다 훨씬 단순했고, 당신의 프로젝트가 이미 셋업되어 가동되고 있는 한 아마도 훨씬 더 일반적인 이유일 것입니다.오랫동안 작동하던 애플리케이션 중 하나에서는 마이그레이션이 엉성해 보였기 때문에 서둘러 다음 작업을 수행했습니다.

rm -r */migrations/*
rm db.sqlite3
python3 manage.py makemigrations
No changes detected

뭐야?

저도 실수로 다 빼버렸습니다.__init__.pyfiles:(-에 들어가 보니 모든 것이 다시 작동하고 있었습니다.

touch ads1/migrations/__init__.py

의 , ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」makemigrations시시시작작작다

, 이 어플리케이션을 .__init__.py migrations하다는 것을 시켜 주었기 에 더 되었습니다.그 때문에, 나는 그것을 더 악화시켰습니다.rm -r상기와 같이

이것이 누군가가 "No changes detected" 오류에 대해 몇 시간 동안 욕하는 것을 막는데 도움이 되기를 바랍니다.

방법: 1

순서: 1

이 꼭 합니다.INSTALLED_APPS정정py변변pypy.py

Stpe : 2

python manage.py makemigrations <appname>

「No changes detected」(변경이 검출되지 않음)

!경고 이것은 프로젝트에 매우 위험하므로 방법 2를 적용하기 전에 프로젝트에 대한 백업이 있는지 확인하십시오.

방법 2

다음을 사용하여 앱 이름을 변경하고 새 앱을 만듭니다.

django-admin startapp <appname>

.py 파 filesexcept

  • 이행 폴더
  • pycache 폴더
  • init.py
  • 코드를 입력하지 않은 경우 test.py 파일


넣으세요.

새 앱에 대해 정확히 동일한 이름을 만들어야 합니다. 그렇지 않으면 프로젝트에서 더 많은 이름을 변경해야 합니다.

때가 있다./manage.py makemigrations에 있다./manage.py makemigrations <myapp>앱 간의 특정 충돌을 처리할 수 있기 때문입니다.

하며, 몇.swearingNo changes detected★★★★★★★★★★★★★★★★★★.

따라서 다음 명령을 사용하는 것이 훨씬 좋습니다.

./manage.py makemigrations <myapp1> <myapp2> ... <myappN>

django 외부에서 테이블을 복사하여 메타 클래스가 "managed = false"로 기본 설정되었습니다.예를 들어 다음과 같습니다.

class Rssemailsubscription(models.Model):
    id = models.CharField(primary_key=True, max_length=36)
    ...
    area = models.FloatField('Area (Sq. KM)', null=True)

    class Meta:
        managed = False
        db_table = 'RSSEmailSubscription'

「 」를 변경해 .managed로로 합니다.True,makemigrations거스름돈을 받기 시작했어요

다른 이유로는 패키지가 아닌 다른 파일에 정의된 모델이 있고 다른 파일에서는 참조하지 않은 경우가 있습니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★from .graph_model import *로로 합니다.admin.py서 (어디서)graph_model.py새로운 파일)이 문제를 해결했습니다.

응용 하고 django api를 하는 python manage.py makemigrations툴은 새로운 모델을 검출하지 못했습니다.

이상한 건 옛날 모델들이 뽑혔다는 거야makemigrations그 는 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.urlpatterns쇠사슬과 도구가 어떻게 해서든 그들을 감지했어요.그러니 그 행동을 잘 지켜봐

에 대응하는 가 포함되어 서브패키지가 포함되어 있기 입니다.__init__.py파일이 비어 있었습니다.하위 폴더모델의 모든 필수 클래스를 명시적으로 가져와야 합니다. __init__.py장고가 직접 주워올 수 있도록makemigrationsdiscloss.discloss.

models
  ├── __init__.py          <--- empty
  ├── patient
  │   ├── __init__.py      <--- empty
  │   ├── breed.py
  │   └── ...
  ├── timeline
  │   ├── __init__.py      <-- empty
  │   ├── event.py
  │   └── ...

이게 다른 사람에게 도움이 될 수도 있을 것 같아요. 결국 몇 시간 동안 이걸 추적하느라 고생했으니까요.

모델 내에 동일한 이름의 함수가 있는 경우 값이 제거됩니다.돌이켜보면 꽤 명백하지만 그럼에도 불구하고.

다음과 같은 기능이 있는 경우:

class Foobar(models.Model):
    [...]
    something = models.BooleanField(default=False)

    [...]
    def something(self):
        return [some logic]

이위의 " 않음"으로 않음"이.makemigrations.

같은 문제는 두 개의 어처구니없는 문제를 입니다.class Meta를 선택합니다. 첫 은 '아예'를 실행할 때 되지 않습니다makemigrations

class Product(models.Model):
    somefield = models.CharField(max_length=255)
    someotherfield = models.CharField(max_length=255)

    class Meta:
        indexes = [models.Index(fields=["somefield"], name="somefield_idx")]

    def somefunc(self):
        pass

    # Many lines...

    class Meta:
        indexes = [models.Index(fields=["someotherfield"], name="someotherfield_idx")]

다른 요.deals그 때문에 를 가지고 deals.py ★★★★★★★★★★★★★★★★★」dealers.py 시.python manage.py makemigrationsNo changes detected.

는 앞으로 는는 the the 안으로 들어갔다.__init__.py있던 및 .

from .deals import *
from .dealers import *

그리고 그 다음에makemigrations명령어가 작동했습니다.

을 Import가 models.py모델이 검출되지 않습니다.

하나 가 된 은 '을 '어플리케이션 입니다.settings.py:

나는 다음을 가지고 있었다.

apps.deals

루트 프로젝트 폴더가 포함되어 있어야 합니다.

cars.apps.deals

저는 이 문제를 이렇게 해결했습니다.

  1. "db.sqlite3" 파일을 지웁니다.여기서의 문제는 현재 데이터베이스가 삭제되기 때문에 다시 작성해야 한다는 것입니다.
  2. 편집한 앱의 마이그레이션 폴더에서 마지막으로 업데이트된 파일을 지웁니다.처음 작성된 파일은 "0001_initial.py"입니다.예를 들어 다음과 같습니다.make migrations 및 migrate 절차로 새 클래스를 만들고 등록했더니 "0002_auto_etc.py"라는 새 파일이 생성되었습니다.지워주세요.
  3. "pycache" 폴더(이행 폴더 내)로 이동하여 "0002_auto_etc.pyc" 파일을 지웁니다.
  4. 마지막으로 콘솔로 이동하여 "python manage"를 사용합니다.py make migrations" 및 "py make migrations"의py migrate" 라고 입력합니다.

이것이 오래된 질문인 것은 알지만, 나는 이 같은 문제로 하루 종일 싸웠고, 나의 해결책은 간단했다.

내 디렉토리 구조는...

apps/
   app/
      __init__.py
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

제가 까지 다른 다른 에서 수입되고 에 결국 하게 되었습니다.main_app에 등록되어 있습니다.INSTALLED_APPS

, 각각을 이기 때문에app로로 합니다.INSTALLED_APPS가 and the app_sub*다른 곳에서 수입되지 않은 새로운 모델 파일을 추가했을 때, 장고는 완전히 무시했습니다.

내 수정은 추가였다.models.py 을 저장하다app★★★★★★★★★★★★。

apps/
   app/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

다음 리리나나 and and and and and and and and and and and를 붙입니다.from apps.app.app_sub1 import *, 각각의 「」에 app ★★★models.pyfiles.complete files files files files files files files files.

음... 이걸 알아내는 데 너무 오래 걸려서 어디에서도 해결책을 찾을 수가 없었어...구글 검색 결과 2페이지까지 갔어요.

이게 누군가에게 도움이 되길 바라!

올바른 주장을 하는 것을 잊었습니다.

class LineInOffice(models.Model):   # here
    addressOfOffice = models.CharField("Корхоная жош",max_length= 200)   #and here
    ...

models.py에 올라갔는데 그 후 짜증나게 떨어지기 시작했어요.

앱 'myApp'에서 검색된 변경 사항이 없습니다.

내 경우 클래스 인수를 삽입하는 것을 잊었다.

틀렸다:

class AccountInformation():

맞아요.

class AccountInformation(models.Model):
INSTALLED_APPS = [

    'blog.apps.BlogConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

]

확실히 해둬야 해BlogConfig', (앱을 이행하기 위해 settings.py에 포함되어 있습니다.

그런 다음 python3 manage를 실행합니다.py make migrations 블로그 또는 앱 이름

이것은, 이하에 나타내는 2개의 순서를 사용해 실시할 수 있습니다.

  1. 추가settings.py> 설치 완료_응용 프로그램
  2. open admin 입니다.화이

from .models import upImg
# Register your models here.
admin.site.register(upImg)

: 치환: ★★upImgclassName에 합니다.models.py

그 후, 아직 남아 있는지 아닌지를 보다python manage.py makemigrations 있거나 있지 않은 한다.python manage.py migrate

자세한 내용은 이 장고 튜토리얼을 참조하십시오.

해결책은 INSTALLED_APPS에 앱을 포함시키는 것입니다.

놓쳤지만 같은 문제를 발견했습니다.

내 앱 이름 마이그레이션이 성공한 후

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'boards',
]

제가 마지막으로 보드를 언급했는데, 그게 제 앱 이름이에요.

또 하나의 엣지 케이스와 솔루션:

부울 필드를 추가하고 동시에 같은 이름(doh)의 @property를 추가했습니다.속성 및 마이그레이션에 코멘트를 달아 새 필드를 표시하고 추가.숙박업소의 이름을 변경했는데 모두 정상입니다.

admin.py에서 모델을 등록해 보십시오.- admin.site.register(Your ModelHere)는 다음과 같습니다.

다음 작업을 수행할 수 있습니다.- 1. admin . site . register ( Your Model Here ) # in admin.py 2. 페이지를 새로고침하여 다시 시도합니다.3 .Ctrl+S를 누르고 4를 저장합니다.오류가 있을 수 있습니다.특히 models.py과 admin.py을 체크해 주세요5. 또는 마지막에 서버를 재기동합니다.

공식 문서의 마이그레이션 섹션에 따르면 django 3.0에서도 이와 유사한 문제가 있었습니다. 이를 실행하면 테이블 구조를 업데이트하기에 충분했습니다.

python manage.py makemigrations
python manage.py migrate

그러나 'make migrations' 스크립트를 실행한 후 모델에 대한 'no changes detected'라는 출력은 항상 동일했습니다.models.py에서 db에서 업데이트하려는 모델에서 구문 오류가 발생했습니다.

field_model : models.CharField(max_length=255, ...)

다음 대신:

field_model = models.CharField(max_length=255, ...)

이 바보 같은 실수를 해결하면 이 명령어를 사용하여 문제없이 이행이 완료됩니다.어쩌면 이게 도움이 될지도 몰라

이 에러의 문제점은 다음과 같습니다.

class Meta:
   abstract = True

이행하고 싶은 Inside 모델

빈 이행 폴더에 빈 init.py을 추가해야 합니다.그런 다음 "python manage"를 사용하여 마이그레이션을 확인합니다.py make migrations."

디렉토리 구조-

  • 당신의 앱
    • 이행
      • init.py

해서 더 돼요.polls.apps.PollsConfig로로 합니다.INSTALLED_APPSsetting.py

할 수 있는 이유는 python python을 할 수 있는 기존 db 및 일 수 .manage.py makemigrations <app_name> 문제에.을 사용법

언급URL : https://stackoverflow.com/questions/36153748/django-makemigrations-no-changes-detected

반응형