Почему 'Django Migrate' воссоздает ограничение внешнего ключа, просто добавляя null = True - PullRequest
0 голосов
/ 19 сентября 2019

Ниже git diff вывод Django model.py.

-    live = models.ForeignKey('live.Live', on_delete=models.CASCADE,
-                             related_name='live_likes')
+    live = models.ForeignKey('live.Live', on_delete=models.SET_NULL,
+                             related_name='live_likes', null=True)

Единственная разница между ними - null=True, и я ожидал, что Django просто запустит SQL drop NOT NULL.

Однако, это реальный результат sqlmigrate из Django.

SET CONSTRAINTS "live_like_live_id_0374bfe6_fk_live_live_id" IMMEDIATE;
ALTER TABLE "live_like" DROP CONSTRAINT "live_like_live_id_0374bfe6_fk_live_live_id";
ALTER TABLE "live_like" ALTER COLUMN "live_id" DROP NOT NULL;
ALTER TABLE "live_like" ADD CONSTRAINT "live_like_live_id_0374bfe6_fk_live_live_id" FOREIGN KEY ("live_id") REFERENCES "live_live" ("id") DEFERRABLE INITIALLY DEFERRED;

Удивительно, но он выполняет дополнительное действие, воссоздающее ограничение внешнего ключа, такое же, как и предыдущее.

Это нормально в Django и почему?

Я думаю, что это дополнительное действие может привести к огромному отказу на стороне производственного сервера.

(Django 2.0.5, PostgreSQL 9.6.9)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...