2016-12-14 4 views
1

FileFieldのストレージを変更するたびに、マイグレーションファイルを作成したくありません。私はsettings.pyからストレージクラスを取得しており、設定可能です。ストレージタイプがデータベースに格納されていない場合、FileFieldのストレージ属性を変更したときにdjangoがマイグレーションファイルを作成するのはなぜですか?

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

設定でストレージが指定されていない場合は、デフォルトのストレージが使用され、マイグレーションが作成されます。最初の移行後にストレージを変更すると、新しい移行ファイルが作成されますが、これは起こりたくありません。 –

答えて

1

は、あなたの質問に私の解釈です - あなたは、ファイルを保存するために、あなたのsettings.pyに指定された(将来的に変更することができます)ストレージ・クラスを使用します。

あなたのsettings.pyにxyzストレージクラスを指定して、マカマイグレーションを実行するとします。 Djangoは、settings.pyで指定したストレージ属性を持つ移行ファイルを作成します。

これで、settings.pyでストレージクラスを変更し、マイクロマイグレーションを実行せずにファイルをアップロードすると、マイクロマイグレーションを実行しなくても、設定ファイルで指定した新しいストレージにファイルがアップロードされます。

希望します。

+0

はい、これは役に立ちますが、私がビルドスクリプトでmakemigrationsを実行するとどうなりますか?その後、移行が作成されます。 –

+0

あなたは解決策を見つけましたか?私は同じ問題を抱えています。私のローカル設定は他の開発者とは異なるので、マイグレーションを行うたびに、パスが異なるためにマイグレーションファイル内のパスが変更されます – nelsonvarela

2

時間の経過とともにモデルに作られました。ただし、必ずしもデータベースに変更が加えられているとは限りません。ここで生成される移行は空の移行です。あなたの移行はおそらくこのように見え、空ではない乾草と言うでしょう!

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を生成しないことがわかります!データベースには影響しません でもオプション - - それは 正しくフィールドを再構築することができる唯一の方法として、Djangoはあなたのモデルまたはフィールドへの変更のための移行を行います@sayse

によって提案​​などからの引用 の履歴にすべての変更が含まれていることがあります。後で(たとえば、カスタムバリデータを設定した場合)、一部のデータ移行でこれらのオプションが必要になる場合があります( )。ここで

+0

@ e4c5 sqlmigrateはSQL文を表示しますが、移行ファイルを作成する必要はありません。それはとにかく可能ですか? –

+0

いいえ、それはできません。更新された答えを参照してください。なぜ、空の移行が問題になるのでしょうか? – e4c5

+0

私のユースケースでの移行は、移行履歴の競合を引き起こします。 –

関連する問題