Django 1.9-makemigrations - изменений не обнаружено
с существующим приложением я пытался создать миграции, используя команду makemigrations, но она говорит "никаких изменений не обнаружено".
обычно я создаю новые приложения с помощью startapp команда, но это конкретное приложение не было.
через некоторое время после отладки я обнаружил, что он не создает миграцию, потому что migrations пакет / папка отсутствует в приложении.
будет лучше, если он создает папку, если ее там нет, или, может быть, мне чего-то не хватает
9 ответов:
чтобы создать начальные миграции для приложения, запустите
makemigrationsи укажите имя приложения. Будет создана папка миграции../manage.py makemigrations <myapp>приложение должно быть включено в
INSTALLED_APPSпервый.
Я прочитал много ответов на этот вопрос, часто заявляя, чтобы просто запустить
makemigrationsв некоторых других отношениях. Но для меня проблема была вMetaподкласс моделей.у меня есть конфигурация приложения, которая говорит
label = <app name>(в , возлеmodels.py,views.pyetc). Если случайно (например, потому что вы разделяете одно слишком большое приложение на несколько), ваш мета-класс не имеет той же метки, никаких изменений не обнаружено (и никакого полезного сообщения об ошибке вообще). Так что в моем класс модели у меня сейчас:class ModelClassName(models.Model): class Meta: app_label = '<app name>' # <-- this label was wrong before. field_name = models.FloatField() ...запуск Django 1.10 здесь.
существует несколько возможных причин, по которым django не обнаруживает, что нужно перенести во время .
- миграция папку вам нужен пакет миграции в вашем приложении.
- INSTALLED_APPS вам нужно, чтобы ваше приложение было указано в
INSTALLED_APPS.дикт- многословие запустить
makemigrations -v 3за многословность. Это может пролить некоторый свет на проблему.- полный путь на
INSTALLED_APPSрекомендуется указать полный путь конфигурации приложения модуля ' применить.приложения.MyAppConfig'- настройки-- вы можете убедиться, что установлен правильный файл настроек:
manage.py makemigrations --settings mysite.settings- указать имя приложения установить имя приложения в
manage.py makemigrations myapp- это сужает миграцию только для приложения и помогает вам изолировать проблему.модель мета проверить вас имеют право
app_labelв модели метаотладка django отладка основного скрипта django. команда makemigrations в значительной степени прямолинейна. вот как это сделать в pycharm. измените определение скрипта соответствующим образом (например:
makemigrations --traceback myapp)несколько баз данных:
- Маршрутизатор ДБ при работе с маршрутизатором django db класс маршрутизатора (ваш пользовательский класс маршрутизатора) необходимо реализовать
allow_syncdbметод.makemigrations всегда создает миграции для изменений модели, но если allow_migrate () возвращает False,
- Это комментарий, но, наверное, должен быть ответ.
убедитесь, что ваше имя приложения находится в 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
иногда, когда
./manage.py makemigrationsпревосходит./manage.py makemigrations <myapp>потому что он может обрабатывать некоторые конфликты между приложениями.эти случаи происходят тихо, и это занимает несколько часов
swearingчтобы понять реальный смысл страшногоNo 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'изменив manged на True, makemigrations начал собирать изменения.
У меня была еще одна проблема, не описанная здесь, которая сводила меня с ума.
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У меня был трейлинг ',' в одной строке, возможно, из copy&paste. Строка с is_dumb не создает миграцию модели с './manage.py makemigrations ' но и не бросил ошибку. После удаления ',' он работал, как ожидалось.
поэтому будьте осторожны, когда вы копируете и вставляете : -)
решение заключается в том, что вы должны включить свое приложение в INSTALLED_APPS.
Я пропустил его, и я нашел этот же вопрос.
после указания моего имени приложения миграция стала успешной
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'boards', ]
обратите внимание, что я упомянул доски в прошлом, что является моим именем приложения.
Comments