2015-11-15 54 views
1

我想從下面的模型的class Meta中刪除unique_together約束。從類Meta刪除Unique_together關係?

class x(models.Model): 
    basket = ... 
    line_reference = ... 
    ... 
    class Meta: 
     unique_together = ("basket", "line_reference") 
     verbose_name = _('Basket line') 
     verbose_name_plural = _('Basket lines') 

我想評論的unique_together線運行makemigrations,但沒有改變被Django的檢測。我使用視圖檢查這個關係約束仍然存在。我怎樣才能消除這種關係。我的數據庫是postgresql

+0

一個解決方案是進入'psql' shell並通過刪除約束來改變這個表。命令:'ALTER TABLE basket_line DROP CONSTRAINT「basket_line_basket_id_line_reference_key」;' – Coderaemon

+1

「我試着評論unique_together和運行makemigrations,但Django沒有檢測到任何變化。」 - >您的應用程序沒有遷移,或者在Django中有錯誤。 – knbk

回答

1

在models.py中註釋並不會對此有所幫助,因爲只有當它看到您創建的關係及其屬性發生變化時才進行遷移。 unique_together是一種約束,如果您只是評論,遷移不會檢測到它們。

我希望你仍然有你的migrations文件夾和所有生成的遷移完好無損。

如果什麼是搞砸得太厲害你是你自己的開發環境,這不妨礙任何人,繼續前進,並清除所有遷移,只是重置分貝。

其他如果您仍然有遷移並且不想刪除它們,您可以嘗試以下方法。 步驟:其中有migrations.AlterUniqueTogether在完成所有遷移文件的列表中的第一次,並評論說,和所有後續發生

  • 轉到遷移文件。
  • 登錄到psql shell和你的數據庫。使用\d+ <table name>查看所有索引和約束。找到一個具有("basket", "line_reference")的約束。算了吧。命令將ALTER TABLE <table_name> DROP CONSTRAINT <name_of_constraint>
  • 現在只需運行migrate <app_name> OR migrate

希望這個作品。