2013-07-19 55 views
0

有沒有什麼辦法,如果選擇從模型選擇中刪除,它應該自動刪除db中的條目。關於django中的模型選擇

class Student(models.Model): 
    FRESHMAN = 'FR' 
    SOPHOMORE = 'SO' 
    JUNIOR = 'JR' 
    SENIOR = 'SR' 
    YEAR_IN_SCHOOL_CHOICES = (
     (FRESHMAN, 'Freshman'), 
     (SOPHOMORE, 'Sophomore'), 
     (JUNIOR, 'Junior'), 
     (SENIOR, 'Senior'), 
    ) 
    year_in_school = models.CharField(max_length=2, 
             choices=YEAR_IN_SCHOOL_CHOICES, 
             default=FRESHMAN) 

現在我已刪除(JUNIOR, '少年')從列表中選擇。在Student表中它應該刪除Junior的記錄。

我正在使用appengine進行發佈。有沒有機會在部署appengine應用程序時進行檢查並將更改發送到db?

任何幫助真的很感激它。

回答

0

號碼南方data migration

+0

但它需要一些手動的努力。我想它是自動的。它應該像信號一樣工作。更改它會自動更新數據庫。 – sush

+0

是的,我正在使用appengine進行發佈。有沒有可能在部署appengine應用程序時進行預先檢查。 – sush

+1

然後你可能想要使它成爲'ForeignKey'。這是更多的連接,但你可以在db中編輯'YEAR_IN_SCHOOL'並清理相關的字段。你描述的行爲是級聯FK刪除。但個人而言,我會留下硬編碼的值和數據遷移,因爲他們似乎並不經常改變。 –

0

所以,我認爲這個問題需要澄清。

如果您想要一個具有變量變量集合的模型,它違背了模型思想。 Django中的模型意味着只能通過在代碼上對代碼進行硬編碼來更改,而不是由用戶或服務器運行時更​​改。

在這種情況下,您需要在您的Student上新建一個模型(例如StudentType)和一個ForeignKey。這樣,一致性可以通過post_savepost_delete信號來應用。

剋日什托夫·Szularz答案是假設其他的事情你的問題(這可能是正確的假設),這是在Django正常情況的:你已經有了一個模型,但代碼的新版本改變了集的選擇。

在這種情況下,正如Krzysztof指出的,Django沒有根據模型更改自動更新數據庫的功能。在這種情況下,你有兩個選擇:

  1. 無論您使用的是第三方應用程序(south是最流行的 一個)
  2. 你手工刪除該條目。

在任一情況下,它們是爲了用作變化對代碼