TL; DR;多対多フィールドリードの中間テーブルを導入するのと同じ移行で完全に異なるフィールドを変更すると、UNIQUE
という制約がありません。1対多から多対多への移行:interm。テーブルにUNIQUE制約がありません
ルートチャレンジ
1対多の関係を多対多に置き換える必要があります。
ステップバイステップ。
が当初想定私が持っている:
class Test(models.Model):
pass
class Test2(models.Model):
title = models.CharField(max_length=100)
test = models.ForeignKey(Test)
ManyToMany
class Test(models.Model):
pass
class Test2(models.Model):
title = models.CharField(max_length=100)
tests = models.ManyToManyField(Test)
にtest2.testを変更し、makemigrations
/migrate
を実行した後、私はペアtest_id
ためにUNIQUE制約を持つ新しいテーブルtest2_test
を取得しています+ test2_id
それは間違いなく私が期待しています。
しかし、私はまた、別のフィールドを更新したかったら:
class Test(models.Model):
pass
class Test2(models.Model):
title = models.TextField()
tests = models.ManyToManyField(Test)
そしてtest2_test
はtest_id
+ test2_id
ためUNIQUE INDEX
を得ることはありません。
私はついに、異なるフィールドの変更を別々の移行に移動しました。
質問
誰もがそのような行動の理由を知っていますか?
私はSQLiteを使用しています。しかし、特定のRDBMSには関係しないと考えています。 – skyboyer
ユニークなインデックスを取得するのはなぜですか? ManyToManyという定義は、その関係が一意ではないことを意味します。 'Test'オブジェクトに関連する任意の数の' Test2'オブジェクトが存在する可能性があります。 – solarissmoke
私は実際それを得ています。一度追加の変更があると、私はそうしない。 – skyboyer