class M_Post(models.Model):
''''
CODE
''''
class M_File(models.Model):
....
CODE
....
class M_Post_File(models.Model):
post = models.ForeignKey(M_Post,on_delete=models.CASCADE)
file = models.ForeignKey(M_File,on_delete=models.CASCADE,null=True)
エラー:
Django.db.utils.NotSupportedError:トランザクション中に 'posts_file'テーブルの名前を変更することは、参照整合性を損なうため、SQLiteではサポートされていません。 atomic = False
をMigrationクラスに追加してみてください。
このエラーを解決する方法
関連する移行ファイル(makemigrationsコマンドの後にmigrationsディレクトリに自動的に作成される)に移動し、_atomic = False
_をMigrationクラスに追加します。 Migration(migrations.Migration):
。その後、変更を移行できます。
それでも問題が解決しない場合の例を次に示します。
# Generated by Django 2.1 on 2018-08-16 21:22
from Django.db import migrations
class Migration(migrations.Migration):
atomic = False # <<<< THIS LINE
dependencies = [
('shop', '0004_product_imgfeat'),
]
operations = [
migrations.RenameModel(
old_name='Category',
new_name='CategoryShop',
),
]
このエラーが発生した後、何度も移行しました。
次に、セリムが上記のことを行い、すべての移行ファイルでclass Migration(migrations.Migration):
の後にatomic = False
を追加しました。
次に、Djangoドキュメンテーションで "atomic = False"を検索し、これらを見つけました: 12
エラー「トランザクション中の「posts_file」テーブルの名前変更はSQLiteではサポートされていません」で説明したように、トランザクション中の名前変更はサポートされていませんSQLiteでは、atomic=False
を追加する必要があります。しかし、私はDDLトランザクションについて知らないので、それは私にとってはやりすぎです...
何も触れたくなく、プロジェクトを開始したばかりの場合(必ずしもそうではありません)、migrationsディレクトリ内の移行ファイルを削除して、再度移行することができます。
それ以外の場合は、移行ファイルのatomic
変数をFalse
に変更してから、変更を移行できます。
別の方法として、atomic = falseメソッドが機能しなかった場合は、移行フォルダー内の生成されたファイルを削除し、移行を行って移行することでやり直すことができます