Приложение Django 1.8 использует стороннее приложение (django-avatar), чья модель содержит ImageField. Я также использую пользовательский DEFAULT_FILE_STORAGE (S3BotoStorage от django-storages-redux) в настройках моего проекта.py. В результате, каждый раз, когда я бегу manage.py migrate
, я получаю это предупреждение о приложении аватара:Django «изменения не отражены в миграции» с ImageField и настраиваемым хранилищем
Ваши модели имеют изменения, которые еще не отражены в миграции, и поэтому не будет применяться. Запустите «manage.py makemigrations», чтобы выполнить новые миграции, а затем повторно запустите «manage.py migrate», чтобы применить их.
... потому что avatar's initial migration ссылки Django по умолчанию FileSystemStorage. Запуск makemigrations создает новую 0002 миграцию в приложении аватар, чтобы сделать хранение своего Imagefield в соответствии с моей настройкой проекта:
...
migrations.AlterField(
model_name='avatar',
name='avatar',
field=models.ImageField(storage=storages.backends.s3boto.S3BotoStorage(), max_length=1024, upload_to=avatar.models.avatar_file_path, blank=True),
),
Проблема эта новая миграция создаются в аватаре, установленном на сайте-пакетах питона, вне моего проекта (так что внешний контроль git, недоступный для развертывания и т. д.).
Каков правильный способ обработки миграции для стороннего приложения, которое использует ImageField (или FileField) в проекте с пользовательским DEFAULT_FILE_STORAGE? Я рассмотрел:
Просто игнорируйте предупреждение. Переход на изменение хранилища фактически не влияет на схему DB , и поскольку DEFAULT_FILE_STORAGE моего проекта был S3BotoStorage с самого начала, миграция данных не требуется.
Использование settings.MIGRATION_MODULES для перемещения аватаров миграции в мой проект. (А затем тщательно порт над каждой будущей миграцией аватара моего экземпляра - который, кажется, подвержены ошибкам.) [EDIT:. this comment на Джанго-пользователей в списке рассылки предполагает, что это неправильный подход]
Спросит django-avatar (или django-storages-redux), чтобы изменить ... что? (BTW, S3BotoStorage уже deconstructible - это не проблема.)
Или ...?
Эй, медиум, я постоянный помощник джанго-аватара, и я также хотел бы узнать ответ на этот вопрос. Считаете ли вы, что создание другой миграции, которая изменяет атрибут 'ImageField.storage', для ссылки на' settings.AVATAR_STORAGE', помешает этому? – grantmcconnaughey
Эй, Грант, спасибо за пакет! Итак, вы добавили бы миграцию схемы в django-avatar и вручную отредактировали ее, чтобы иметь что-то вроде 'storage = get_storage_class (settings.AVATAR_STORAGE)()'?Я думаю, что это может решить мою проблему, но вам придется не забывать редактировать каждый будущий django-аватар схемы так же. Кроме того, это может вызвать проблемы для людей, которые действительно пытаются перенести из одного хранилища в другое, потому что это не будет замораживать состояние во время миграции (возможно - не уверен в этом). – medmunds
Обсуждается миграция и хранение в трекер Django ([22373] (https://code.djangoproject.com/ticket/22373) и [22337] (https://code.djangoproject.com/ticket/22337)), но ни один из них в контексте сторонних приложений. Интересно, поможет ли это поднять вопрос? – medmunds