2016-03-22 3 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 вам нужно указать имя приложения, если приложение не имеет папку 'migrations'. Это может произойти, если вы создали приложение вручную или вы обновили его из старой версии Django, у которой не было миграции. – Alasdair

+0

@maazza На самом деле вам нужен пакет python (с '__init __. Py') с именем« migrations »в приложении. – Jibin

4

Иногда, когда ./manage.py makemigrations превосходит ./manage.py makemigrations <myapp>, так как он может обрабатывать определенные конфликты между приложениями.

Эти случаи происходят молча и требуется несколько часов swearing, чтобы понять реальное значение страшного сообщения 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 –

Смежные вопросы