用少數CharFields和一個ForeignKey創建Django模型(使用Python 3.5/Django 1.9.7/SQLite)後,運行manage.py makemigrations
我去分析創建的SQL代碼manage.py sqlmigrate APP_NAME, MIGRATION_NAME
,並對結果感到驚訝。爲什麼Django makemigrations創建模型,將其重命名爲model_old,再次創建並刪除model_old?
任何人都可以解釋爲什麼它正在創建,將表重命名爲model_old,再次創建,將數據從創建/重命名model_old導入剛創建的表,然後刪除model_old表?
我看到最終結果與我真正需要的表格看起來是正確的,我只是想了解它爲什麼這樣做。貝婁是生成的SQL腳本
BEGIN;
--
-- Create model Foo
--
CREATE TABLE "foo_foos" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "created" datetime NOT NULL, "modified" datetime NOT NULL, "name" varchar(250) NOT NULL, "description" varchar(250) NOT NULL,"bar_id" integer NULL REFERENCES "foo_bar" ("id"));
--
-- Alter unique_together for foos (1 constraint(s))
--
ALTER TABLE "foo_foos" RENAME TO "foo_foos__old";
CREATE TABLE "foo_foos" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "created" datetime NOT NULL, "modified" datetime NOT NULL, "name" varchar(250) NOT NULL, "description" varchar(250) NOT NULL,"bar_id" integer NULL REFERENCES "foo_bar" ("id"));;
INSERT INTO "foo_foos" ("created", "modified", "name", "description", "id", "bar_id") SELECT "created", "modified", "name", "description", "id", "bar_id" FROM "foo_foos__old";
DROP TABLE "foo_foos__old";
CREATE UNIQUE INDEX "foo_foos_name_42a88411_uniq" ON "foo_foos" ("name", "description");
CREATE INDEX "foo_foos_3b5ba656" ON "foo_foos" ("foo_id");
COMMIT;
這裏是模型的樣子:
class Foo(models.Model):
name = models.CharField(max_lenght=250)
description = models.CharField(max_lenght=250)
bar = models.ForeignKey(Bar, on_delete=models.SET_NULL)
class Meta:
unique_together = ('name', 'description')