[python] Django 1.7 - makemigrations не обнаруживает изменений



Answers

Хорошо, похоже, я пропустил очевидный шаг, но опубликую это, если кто-то другой сделает то же самое.

При обновлении до 1.7 мои модели стали неуправляемыми ( managed = False ) - у меня были они как True раньше, но, похоже, они вернулись.

Удаление этой строки (по умолчанию True), а затем запуск makemigrations сразу же сделал модуль миграции, и теперь он работает. makemigrations не будет работать на неуправляемых таблицах (что очевидно в ретроспективе)

Question

Как говорится в названии, я не могу заставить миграцию работать.

Первоначально приложение было под 1,6, поэтому я понимаю, что миграций там не будет, и действительно, если я запустил python manage.py migrate я получаю:

Operations to perform:
  Synchronize unmigrated apps: myapp
  Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
  Installing custom SQL...
  Installing indexes...
Running migrations:
  No migrations to apply.

Если я внес изменения в какие-либо модели в myapp , он по-прежнему говорит о немиграции, как и ожидалось.

Но если я запускаю python manage.py makemigrations myapp я получаю:

No changes detected in app 'myapp'

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

Есть ли способ заставить приложение перейти на миграцию и по существу сказать: «Это моя база для работы» или что-то еще? Или я чего-то не хватает?

Моя база данных является PostgreSQL, если это вообще помогает.




Согласитесь с @furins. Если все выглядит по порядку, и все же возникает эта проблема, проверьте, существует ли какой-либо метод свойств с тем же заголовком, что и атрибут, который вы пытаетесь добавить в класс модели.

  1. Удалите метод с похожим именем как добавляемый вами атрибут.
  2. manage.py makemigrations my_app
  3. manage.py migrate my_app
  4. Добавьте методы обратно.



Может быть, это поможет кому-то.

Я удалил my models.py и ожидаемые makemigrations для создания операторов DeleteModel .

Не забудьте удалить файлы *.pyc !




Недавно я обновил Django с 1,6 до 1,8 и у них было мало приложений и миграций для них. Я использовал юг и schemamigrations для создания миграций в Django 1.6, который был schemamigrations в Django 1.8.

Когда я добавил новые модели после обновления, команда makemigrations не обнаружила никаких изменений. И затем я попробовал решение, предложенное @drojf (1-й ответ), он работал нормально, но не смог применить фальшивую начальную миграцию ( python manage.py --fake-initial ). Я делал это, так как мои таблицы (старые таблицы) уже были созданы.

Наконец, это сработало для меня, удалило новые модели (или изменения моделей) с models.py, а затем пришлось удалить (или переименовать для резервного копирования) папку миграций всех приложений и запустить python manage.py makemigrations для всех приложений, а затем python manage.py migrate --fake-initial . Это работало как прелесть. После того, как начальная миграция создана для всех приложений и поддельная начальная миграция, добавлены новые модели и последовательный регулярный процесс makemigrations и переход на это приложение. Изменения были обнаружены сейчас, и все прошло хорошо.

Я просто подумал о том, чтобы поделиться им здесь, если кто-то сталкивается с такой же проблемой (с schemamigrations юга для своих приложений), это может помочь им :)




Это может произойти по следующим причинам:

  1. Вы не добавили приложение в список INSTALLED_APPS в settings.py (вам нужно добавить либо имя приложения, либо точечный путь к подклассу AppConfig в apps.py в папке приложения, в зависимости от используемой версии django) , См. Документацию: INSTALLED_APPS
  2. У вас нет папки migrations внутри этих приложений. (Решение: просто создайте эту папку).
  3. У вас нет файла __init__.py внутри папки migrations этих приложений. (Решение: просто создайте пустой файл с именем __init__.py )
  4. У вас нет файла __init__.py внутри папки приложения. (Решение: просто создайте пустой файл с именем __init__.py )
  5. У вас models.py файла models.py в приложении.
  6. Ваш класс Python (предположительно являющийся моделью) в models.py не наследует django.db.models.Model
  7. У вас есть семантическая ошибка в определении моделей в models.py

Примечание. Общей ошибкой является добавление папки migrations в файл .gitignore . При клонировании из удаленного репо в локальном репо отсутствует папка migrations и / или файлы __init__.py . Это вызывает проблемы.

Я предлагаю игнорировать файлы миграции, добавив следующие строки в файл .gitignore

*/migrations/*
!*/migrations/__init__.py



Добавил этот ответ, потому что никто из других доступных выше не работал для меня.

В моем случае случалось что-то еще более странное ( версия Django 1.7 ). В моих моделях.py у меня была «лишняя» строка в конце моего файла (это была пустая строка), и когда я выполнял python manage.py makemigrations В результате получилось: «никаких изменений не обнаружено».

Чтобы исправить это, я удалил эту «пустую строку», которая была в конце моего файла models.py, и я снова запустил команду, все было исправлено, и все изменения, внесенные в models.py, были обнаружены!




После меня работали:

  1. Добавьте имя приложения в settings.py
  2. использовать 'python manage.py makemigrations'
  3. использовать 'python manage.py migrate'

Работал для меня: Python 3.4, Django 1.10




Может быть, это поможет кому-то. Я использовал вложенное приложение. project.appname, и у меня на самом деле был проект и project.appname в INSTALLED_APPS. Удаление проекта из INSTALLED_APPS позволило обнаружить изменения.




Добавление этого ответа, потому что только этот метод помог мне.

Я удалил папку migrations makemigrations и makemigrations .
Он по-прежнему сказал: никаких миграций не требуется.

Я пошел в папку migrate и открыл последний созданный файл,
прокомментировать миграцию, которую я хотел (она была обнаружена и введена там)
и снова выполнить migrate .

Это в основном редактирование файла миграции вручную.
Сделайте это, только если вы понимаете содержимое файла.




Использовал ли u schemamigration my_app --initial после переименования старой папки миграции? Попробуй. Может работать. Если нет - попробуйте воссоздать базу данных и сделать syncdb + migrate. Это сработало для меня ...




Вы хотите проверить settings.py в списке INSTALLED_APPS и убедиться, что все приложения с моделями указаны там.

Запуск makemigrations в папке проекта означает, что он будет искать обновления всех таблиц, связанных со всеми приложениями, включенными в settings.py для проекта. Когда вы makemigrations его, makemigrations будет автоматически включать приложение (это экономит много работы, поэтому вам не нужно запускать makemigrations app_name для каждого приложения в вашем проекте / сайте).




Related