“Django”;未反映在迁移中的更改”;使用ImageField和自定义存储

“Django”;未反映在迁移中的更改”;使用ImageField和自定义存储,django,django-migrations,django-storage,Django,Django Migrations,Django Storage,我的Django 1.8应用程序使用第三方应用程序(),其模型包含一个ImageField。我还在项目的settings.py中使用一个自定义的默认文件存储(S3BotoStorage from)。因此,每次运行manage.py migrate,我都会收到关于化身应用程序的以下警告: 您的模型所做的更改尚未反映在迁移中,因此不会应用。 运行“manage.py makemigrations”进行新的迁移,然后重新运行“manage.py migrate”进行应用 。。。因为引用了Django的

我的Django 1.8应用程序使用第三方应用程序(),其模型包含一个ImageField。我还在项目的settings.py中使用一个自定义的默认文件存储(S3BotoStorage from)。因此,每次运行
manage.py migrate
,我都会收到关于化身应用程序的以下警告:

您的模型所做的更改尚未反映在迁移中,因此不会应用。 运行“manage.py makemigrations”进行新的迁移,然后重新运行“manage.py migrate”进行应用

。。。因为引用了Django的默认文件系统存储。运行makemigrations可在avatar应用程序中创建新的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站点包中的avatar中创建的,在我的项目之外(因此在git控制之外,不可用于部署,等等)

对于在具有自定义默认文件存储的项目中使用ImageField(或FileField)的第三方应用程序,处理迁移的正确方法是什么?我考虑过:

  • 不要理会这个警告。迁移到更改存储实际上并不需要 影响数据库模式,并且自从我的项目的默认\u文件\u存储 S3BOtograge自启动以来,不需要数据迁移

  • 用于移动化身的 迁移到我的项目中。(然后仔细观察每一个未来 化身迁移到我的副本——这似乎容易出错。) [编辑:在 django用户邮件列表表明这是错误的方法。]

  • 请django avatar(或django storages redux)维护人员更改。。。什么? (顺便说一句,S3BOtograge已经——这不是问题所在。)

  • 还是


  • 答案是。。。请django avatar维护人员修复它

    如果只想使用默认存储,则应将
    None
    django.core.files.storage.default\u storage
    传递到
    ImageField
    。在这种情况下,
    storage
    kwarg将不会传递到迁移中的字段


    我是为了解决这个问题而创建的。

    嘿,medmunds,我现在是django avatar的维护者,我也想知道这个问题的答案。你认为创建另一个迁移来更改
    ImageField.storage
    属性为reference
    settings.AVATAR\u storage
    会阻止这种情况吗?嘿,格兰特,谢谢你的软件包!因此,您需要向django avatar添加一个模式迁移,并手动编辑它,使其具有类似于
    storage=get\u storage\u class(settings.avatar\u storage)(
    ?我想这可能会解决我的问题,但你必须记住以同样的方式编辑每一个未来的django化身模式。此外,它可能会给真正尝试从一个存储迁移到另一个存储的人带来问题,因为迁移时不会冻结状态(可能——对此不确定)。Django tracker(和)中有一些关于迁移和存储的讨论,但在第三方应用的上下文中没有。我想知道在那里提出这个问题是否有帮助?是的,这就是我所说的。我认为你在这个问题上是对的,没有冻结移民的状态。即使我将其更改为使用
    AVATAR\u存储
    ,也无法解决在项目生命周期中更改
    AVATAR\u存储
    的问题。我真的不知道该怎么办。我会考虑提出一个问题。很好:
    default\u storage
    ——我不知道。django avatar现在是否也需要新的迁移来覆盖其?@medmunds中对
    django.core.files.storage.FileSystemStorage()
    的显式引用?我刚刚修改了PR中现有的迁移,但是我不确定这是否是正确的方法/