web-dev-qa-db-ja.com

ManyToManyFieldをnulltrue、blank trueに移行しても、認識されません

からモデルを変更しました

standard = models.ManyToManyField(Standard)

standard = models.ManyToManyField(Standard, blank=True, null=True)

このアプリの南スキーマ移行は変更を認識しませんか?

答えられていないこの質問に似ています: 南の移行と多対多のフィールドへの変更

22
npradeetw

その動作は正しいです。nullを使用した場合、ManyToManyFieldはデータベースレベルでは何の意味もありません。 ManyToManyFieldを宣言すると、関係を保持する中間テーブルが作成されますが、Djangoは、モデルインスタンスにstandard属性を作成します。便宜上、nullになる可能性のある実際の列はありません。定義上、関係のインスタンスは常にゼロになる可能性があります。

ただし、blank=Falseは検証に影響を及ぼし(たとえば、管理アプリなどのモデルフォームを使用する場合)、ユーザーは少なくとも1つのリレーションを選択する必要があります。

(Djangoの組み込みの移行システムは、データベースに影響するかどうかに関係なく、モデルへのほぼすべての変更に対して移行を作成することに注意してください。したがって、この変更は移行につながる可能性がありますが、データベースに影響を与えることはありません。関係のインスタンスをゼロにすることはできません。)