2016-03-22 196 views
28

使用makemigrations命令嘗試創建遷移的現有應用程序,但它顯示「未檢測到更改」。Django 1.9 - makemigrations - 未檢測到更改

通常我使用startapp命令創建新的應用程序,但這個特定的應用程序不是。

經過一段時間的調試,我發現它沒有創建遷移,因爲應用程序缺少migrations程序包/文件夾。

會更好它創建文件夾,如果它不存在或者也許我失去了一些東西

+6

你有你的應用添加到INSTALLED_APPS? – wolendranh

+3

是的,它是在安裝的應用程序,第一次,更好地使用'makemigrations '作爲阿拉斯代爾指出。 – Dilraj

+0

刪除'abstract = True':) – GrvTyagi

回答

71

要爲應用程序創建初始遷移,運行makemigrations並指定應用程序的名稱。遷移文件夾將被創建。

./manage.py makemigrations <myapp> 

您的應用必須首先包含在INSTALLED_APPS之內。

+2

任何想法爲什麼他們強迫我們指定的應用程序? – maazza

+7

@maazza如果應用程序沒有「遷移」文件夾,則需要指定應用程序名稱。如果您手動創建了應用程序,或者您已從沒有遷移的舊版Django升級,則可能會發生這種情況。 – Alasdair

+0

@maazza實際上你需要一個名爲'migrations'的應用程序中的python包(帶'__init __。py')。 – Jibin

4

有時候./manage.py makemigrations優於./manage.py makemigrations <myapp>,因爲它可以處理應用程序之間的某些衝突。

這些場合默默無聞地發生,需要花費幾小時的時間才能瞭解可怕的No changes detected消息的實際含義。

因此,它是一個更好的選擇,使用以下命令:

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

8

我讀過許多這個問題的答案往往說明簡單地運行在其他一些方面makemigrations。但對我而言,問題在於模型的Meta子類。

我有一個應用程序配置,說label = <app name>(在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() 
    ... 

在這裏運行Django 1.10。

3

這是一個評論,但應該可能是一個答案。

確保您的應用名稱位於settings.py INSTALLED_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 
2

我的問題(等溶液)還從與上述不同。

我沒有使用models.py文件,但創建了一個models目錄,並在那裏創建了my_model.py文件,我放置了我的模型。 Django無法找到我的模型,因此它寫道沒有適用的遷移。

我的解決辦法是:在my_app/models/__init__.py文件中添加此行: from .my_model import MyModel

+0

我有同樣的問題:) Thx –