Django 1.9-makemigrations - изменений не обнаружено



с существующим приложением я пытался создать миграции, используя команду makemigrations, но она говорит "никаких изменений не обнаружено".



обычно я создаю новые приложения с помощью startapp команда, но это конкретное приложение не было.



через некоторое время после отладки я обнаружил, что он не создает миграцию, потому что migrations пакет / папка отсутствует в приложении.



будет лучше, если он создает папку, если ее там нет, или, может быть, мне чего-то не хватает

843   9  

9 ответов:

чтобы создать начальные миграции для приложения, запустите makemigrations и укажите имя приложения. Будет создана папка миграции.

./manage.py makemigrations <myapp>

приложение должно быть включено в INSTALLED_APPS первый.

Я прочитал много ответов на этот вопрос, часто заявляя, чтобы просто запустить makemigrations в некоторых других отношениях. Но для меня проблема была в Meta подкласс моделей.

у меня есть конфигурация приложения, которая говорит label = <app name> (в , возле models.py,views.py etc). Если случайно (например, потому что вы разделяете одно слишком большое приложение на несколько), ваш мета-класс не имеет той же метки, никаких изменений не обнаружено (и никакого полезного сообщения об ошибке вообще). Так что в моем класс модели у меня сейчас:

class ModelClassName(models.Model):

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

    field_name = models.FloatField()
    ...

запуск Django 1.10 здесь.

моя проблема (и поэтому решение) все же отличалась от описанных выше.

Я не использовал , а

существует несколько возможных причин, по которым django не обнаруживает, что нужно перенести во время .

  1. миграция папку вам нужен пакет миграции в вашем приложении.
  2. INSTALLED_APPS вам нужно, чтобы ваше приложение было указано в INSTALLED_APPS .дикт
  3. многословие запустить makemigrations -v 3 за многословность. Это может пролить некоторый свет на проблему.
  4. полный путь на INSTALLED_APPS рекомендуется указать полный путь конфигурации приложения модуля ' применить.приложения.MyAppConfig'
  5. настройки-- вы можете убедиться, что установлен правильный файл настроек:manage.py makemigrations --settings mysite.settings
  6. указать имя приложения установить имя приложения в manage.py makemigrations myapp - это сужает миграцию только для приложения и помогает вам изолировать проблему.
  7. модель мета проверить вас имеют право app_label в модели мета

  8. отладка 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

    Ничего не найдено.