每当我更改FileField的存储空间时,我都不想创建迁移文件。我从settings.py获取存储类,它是可配置的。
settings.py
Storage = S3BotoStorage(bucket='example')
models.py
from django.conf import settings
class myModel(models.Model):
file = models.FileField(upload_to='', blank=True, storage=settings.Storage)
答案 0 :(得分:4)
当您对模型进行更改时,django必须进行迁移,因为它需要跟踪随着时间的推移对模型所做的更改。但是,这并不总是意味着将在数据库中进行修改。这里产生的迁移是空的。您的迁移可能看起来像这样,你会说,干草不是空的!!
class Migration(migrations.Migration):
dependencies = [
('stackoverflow', '0010_jsonmodel'),
]
operations = [
migrations.AlterField(
model_name='jsonmodel',
name='jfield',
field=stackoverflow.models.MyJsonField(),
),
migrations.AlterField(
model_name='parent',
name='picture',
field=models.ImageField(storage=b'Bada', upload_to=b'/home/'),
),
]
但它是!!只是做
./manage.py sqlmigrate <myapp> <migration_number>
你会发现它不会产生任何SQL!根据@sayse
建议的manual引用Django将对您的模型或字段进行任何更改进行迁移 - 甚至不影响数据库的选项 - 作为唯一的方式 正确地重建一个字段就是拥有所有的变化 历史记录,您可能需要在某些数据迁移中使用这些选项 稍后(例如,如果你设置了自定义验证器)。
答案 1 :(得分:0)
以下是我对您的问题的解释 - 您希望使用settings.py中指定的存储类(可以在以后更改)来存储文件。
假设您在settings.py中指定了xyz存储类并运行makemigrations。 Django将创建一个迁移文件,其存储属性与您在settings.py中指定的属性相同。
现在,如果更改settings.py中的存储类并且不运行makemigrations并上传文件,即使您没有运行makemigrations,您的文件也会上传到您在设置文件中指定的新存储。
希望它有所帮助。