2013-07-19 50 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. 你手工删除该条目。

在任一情况下,它们是为了用作变化对代码