【问题标题】:Creating migrations for auth app in django在 django 中为身份验证应用程序创建迁移
【发布时间】:2012-05-23 12:14:45
【问题描述】:
我需要在 django contrib.auth 应用程序中的 Group 模型中添加几个字段:
field_name = models.CharField(...)
field_name.contribute_to_class(Group, 'field_name')
我的问题是在使用 South 创建迁移时,因为它们是在 auth 应用程序内的“迁移”目录中创建的,并且由于系统已经在生产中,所以我不允许更改当前 django 安装服务器以迁移auth。
有谁知道如何创建和加载此类迁移?
提前感谢您的帮助。
【问题讨论】:
标签:
python
django
migration
django-south
【解决方案1】:
Django 不会让修改标准模型变得特别容易。我不建议您对Group 进行子类化,因为使用内置功能来引用新模型非常烦人。
这里通常要做的是创建一个GroupProfile 模型,它有一个Group 作为唯一的外键。它可能并不优雅,但不会产生分叉 Django 源代码所带来的巨大维护开销。
另外:如果您无法修改服务器上的 Django 代码,那么您将无法使用原始 SQL 黑客技术或巧妙的迁移来做到这一点。 South 不会是问题——问题是 Django ORM 会注意到 SQL 表中存在未在代码中指定的字段,这将导致它抛出异常。
【解决方案2】:
由于您使用 hack 来修补模型,我认为您应该手动编写迁移。尝试复制另一个迁移并首先更改 add_column 和 models,如果失败 - 总是有一个名为“raw sql”的选项:)