2017-07-17 104 views
0

問一個朋友......任何人都可以解釋爲什麼我的Django遷移下降,並重新添加完全相同的約束在我的表列時,我將blank=True添加到模型字段?這是我在我的模型的變化:Django遷移下降,並重新添加相同的約束

# old definition 
class CatalogCourse(models.Model): 
    subjects = models.ManyToManyField(CatalogSubject, related_name="catalog_course_set") 

# new definition with `blank=True` 
class CatalogCourse(models.Model): 
    subjects = models.ManyToManyField(CatalogSubject, related_name="catalog_course_set", blank=True) 

當我makemigrations,我得到這個遷移:

class Migration(migrations.Migration): 

    dependencies = [ 
     ('homepage', '0005_previous_migration'), 
    ] 

    operations = [ 
     migrations.AlterField(
      model_name='catalogcourse', 
      name='subjects', 
      field=models.ManyToManyField(blank=True, related_name='catalog_course_set', to='homepage.CatalogSubject'), 
     ), 
    ] 

這個遷移的SQL很簡單:

BEGIN; 
-- 
-- Alter field subjects on catalogcourse 
-- 
ALTER TABLE "homepage_catalogcourse_subjects" DROP CONSTRAINT "homepa_catalogsubject_id_304824f4_fk_homepage_catalogsubject_id"; 
ALTER TABLE "homepage_catalogcourse_subjects" ADD CONSTRAINT "homepa_catalogsubject_id_304824f4_fk_homepage_catalogsubject_id" FOREIGN KEY ("catalogsubject_id") REFERENCES "homepage_catalogsubject" ("id") DEFERRABLE INITIALLY DEFERRED; 
ALTER TABLE "homepage_catalogcourse_subjects" DROP CONSTRAINT "homepage_catalogcourse_id_cc699e39_fk_homepage_catalogcourse_id"; 
ALTER TABLE "homepage_catalogcourse_subjects" ADD CONSTRAINT "homepage_catalogcourse_id_cc699e39_fk_homepage_catalogcourse_id" FOREIGN KEY ("catalogcourse_id") REFERENCES "homepage_catalogcourse" ("id") DEFERRABLE INITIALLY DEFERRED; 
COMMIT; 

是否Django剛剛建成放下約束並在我們改變字段時重新添加它?我想不出爲什麼需要這樣做?有外鍵約束存在時無法執行的操作嗎?

+0

爲什麼你在關係的兩邊都有很多領域?這幾乎肯定是錯誤的。 –

+0

我不......我向你展示的是新舊空白區域,其中新空白區域爲真,舊區域沒有。這是同一個模型。我只是想表達我的改變很小,不應該與模型的數據庫定義有任何關係。 – ngoue

回答