【问题标题】:regarding models choices in django关于 django 中的模型选择
【发布时间】:2013-07-19 09:26:42
【问题描述】:

如果从模型选择中删除一个选项,有什么办法也应该自动删除数据库中的条目。

喜欢

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, 'Junior') 选项。在 Student 表中,它应该删除带有 Junior 的记录。

我正在使用 appengine 进行发布。在部署 appengine 应用程序并将更改发送到 db 时是否有机会检查?

任何帮助都非常感谢。

【问题讨论】:

    标签: django google-app-engine django-models


    【解决方案1】:

    没有。南下data migration

    【讨论】:

    • 但这需要一些手动操作。我希望它是自动的。它应该像信号一样工作。更改后它会自动更新数据库。
    • 是的,我正在使用 appengine 进行发布。部署 appengine 应用程序时是否有机会进行预检查。
    • 那么你可能想成为ForeignKey。这是更多的连接,但您可以在 db 中编辑 YEAR_IN_SCHOOL 并清理相关字段。您描述的行为是级联 FK 删除。但就我个人而言,我会坚持使用硬编码值和数据迁移,因为它们似乎并不经常更改。
    • 我的应用程序中有一个很长的选择列表,因为我不能直接放入数据库中,选择列表是一个文件,这个选择会多次更改,这就是寻找一些的原因自动化解决方案。
    • 对不起,我不明白最后的评论。 db中的那些选择已经存在了吗? Db 非常适合经常更改的内容。 :) 这就是它的用途。 :)
    【解决方案2】:

    所以,我认为这个问题需要澄清一下。

    如果您想要一个具有变量 选项集的模型,这与模型理念相悖。 Django 中的模型意味着只能通过在代码上硬编码来更改,而不是由用户或在服务器运行时更​​改。

    在这种情况下,您可能需要一个新模型(例如 StudentType)和 Student 上的 ForeignKey。这样,post_savepost_delete 信号可以应用一致性。

    Krzysztof Szularz 的答案是假设您的问题之外的其他事情(这可能是正确的假设),这是 Django 中的正常情况:您已经有一个模型,但是 您的代码有一个新版本 更改了选择集。

    在这种情况下,正如 Krzysztof 所指出的,Django 不具备根据模型更改自动更新数据库的功能。在这种情况下,您有两种选择:

    1. 您要么为此使用第三方应用程序(south 是最 流行的)
    2. 您手动删除了条目。

    在任何一种情况下,它们都被用作代码更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2017-04-16
      • 2013-01-07
      相关资源
      最近更新 更多