В моем приложении Django 1.8 используется стороннее приложение (django-avatar), модель которого содержит ImageField. Я также использую собственный DEFAULT_FILE_STORAGE (S3BotoStorage из django-storages-redux) в настройках моего проекта .py. В результате каждый раз, когда я запускаю manage.py migrate
, я получаю следующее предупреждение о приложении аватара:
В ваших моделях есть изменения, которые еще не отражены в миграции, поэтому не будут применены. Запустите manage.py makemigrations, чтобы выполнить новые миграции, а затем повторно запустите manage.py migrate, чтобы применить их.
... потому что первоначальная миграция аватара ссылается на FileSystemStorage по умолчанию Django. Запуск 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),
),
Проблема в том, что эта новая миграция создается в аватаре, установленном в пакетах сайта python, вне моего проекта (т.е. вне контроля git, недоступен для развертывания и т. Д.).
Как правильно обрабатывать миграции для стороннего приложения, которое использует ImageField (или FileField) в проекте с настраиваемым DEFAULT_FILE_STORAGE? Я считал:
Просто игнорируйте предупреждение. Миграция в хранилище изменений фактически не влияет на схему БД, и поскольку мой проект DEFAULT_FILE_STORAGE с самого начала был S3BotoStorage, перенос данных не требуется.
Используйте settings.MIGRATION_MODULES, чтобы перенести миграции аватара в мой проект. (А затем аккуратно переносите каждую будущую миграцию аватара в мою копию - что кажется подверженным ошибкам.) [EDIT: этот комментарий в списке рассылки django-users предполагает, что это неправильный подход.]
Попросите разработчиков django-avatar (или django-storerages-redux) изменить ... что? (Кстати, S3BotoStorage уже деконструируемый - проблема не в этом.)
Or...?
ImageField.storage
на ссылкуsettings.AVATAR_STORAGE
? - person grantmcconnaughey   schedule 15.02.2016storage=get_storage_class(settings.AVATAR_STORAGE)()
? Я думаю, это может решить мою проблему, но вам нужно не забыть редактировать каждую будущую миграцию схемы django-avatar таким же образом. Кроме того, это может вызвать проблемы у людей, действительно пытающихся перейти с одного хранилища на другое, потому что это не приведет к замораживанию состояния во время миграции (возможно, - не уверен в этом). - person medmunds   schedule 15.02.2016AVATAR_STORAGE
, это все равно не решит проблему измененияAVATAR_STORAGE
в течение жизни проекта. Я действительно не знаю, как это сделать. Я постараюсь поднять проблему. - person grantmcconnaughey   schedule 16.02.2016