Миграция ManyToManyField на значение null, пустое значение true, не распознается

Я изменил модель с

standard = models.ManyToManyField(Standard)

к

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

Южная схема миграции для этого приложения не распознает изменения?

Подобно этому вопросу, который не отвечает: Южные миграции и изменения во многих областях

Ответ 1

Это правильное поведение: null ничего не значит на уровне базы данных при использовании с ManyToManyField. Объявление ManyToManyField приводит к созданию промежуточной таблицы для хранения отношения, и, хотя Django создаст standard атрибут для экземпляра вашей модели для вашего удобства, нет фактического столбца, представляющего его, который мог бы быть обнулен. По определению всегда может быть ноль экземпляров отношения.

blank=False, однако, влияет на приложение администратора, заставляя пользователя выбирать хотя бы одно отношение.

(Обратите внимание, что встроенная система миграции Django создает миграции практически для любого изменения модели, независимо от того, влияет ли оно на базу данных или нет. Таким образом, это изменение может привести к миграции, но это не повлияет на базу данных, или не могли бы вы иметь ноль экземпляров отношений.)