Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迁移引用动态存储不一致_Python_Django_Django Storage - Fatal编程技术网

Python 迁移引用动态存储不一致

Python 迁移引用动态存储不一致,python,django,django-storage,Python,Django,Django Storage,我希望模型中的特定字段使用S3存储(如果设置具有AWS\u访问\u密钥\u ID)或回退到default\u存储。我正在使用django存储 要实现这一点,请在models.py中: 来自django.db导入模型的 从django.conf导入设置 from.storage\u后端导入变量存储 类配置文件(models.Model): user=models.OneToOneField(settings.AUTH\u user\u MODEL,on\u delete=models.CASCAD

我希望模型中的特定字段使用S3存储(如果设置具有
AWS\u访问\u密钥\u ID
)或回退到
default\u存储
。我正在使用
django存储

要实现这一点,请在models.py中:

来自django.db导入模型的

从django.conf导入设置
from.storage\u后端导入变量存储
类配置文件(models.Model):
user=models.OneToOneField(settings.AUTH\u user\u MODEL,on\u delete=models.CASCADE)
photo=models.ImageField(上传到='/public',默认值为='dummy-img.png',存储=variativeStorage())
storage_backends.py:

从storages.backends.s3boto3导入s3boto3存储
从django.core.files.storage导入默认存储
从django.conf导入设置
def variativeStorage():
“”“如果定义了访问密钥,则返回S3BOTO3存储。”。
回退到默认存储。
"""
如果hasattr(设置,“AWS\u访问密钥\u ID”)和settings.AWS\u访问密钥\u ID:
返回S3boto3存储()
返回默认存储
它工作得很好,但问题是在迁移中—它评估当前使用的django设置的字段
存储。因此,如果我们没有
AWS\u访问权\u密钥\u ID
makemigrations
将执行以下操作:

operations = [
        migrations.AlterField(
            model_name='profile',
            name='photo',
            field=models.ImageField(default='dummy-img.png', upload_to='/public'),
        ),
    ]
如果有:

operations = [
        migrations.AlterField(
            model_name='profile',
            name='photo',
            field=models.ImageField(default='dummy-img.png', storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to='/public'),
        ),
    ]
因此,在生产环境中运行服务器将触发丢失迁移的警告:

remote: Running migrations:
remote: No migrations to apply.
remote: Your models have changes that are not yet reflected in a migration, and so won't be applied.
remote: Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.

是否有一种一致的方法来对现场进行动态存储?如何对
variativeStorage
进行延迟评估,或者删除该特定字段的迁移生成?

找到答案了吗?@cristianocelho no。坦白地说,经过几天的尝试,我在生产服务器上弹出了警告。