3

我从我的项目中删除了一个包含几个自定义字段的应用程序。现在,当我尝试运行我的迁移时,我ImportError自然而然地得到了。这些字段是非常基本的自定义,如下所示:

from django.db.models.fields import IntegerField

class SomeField(IntegerField):
    def get_internal_type(self):
        return "SomeField"

    def db_type(self, connectio=None):
        return 'integer'

    def clean(self, value):
        # some custom cleanup
        pass

因此,它们都不包含任何数据库级别的自定义。

当我删除此代码时,我已经创建了迁移,因此后续迁移都运行良好。但是当我尝试在预删除数据库上运行它们时,我意识到我的错误。

我可以重新创建一个简单的应用程序并使这些导入工作,但理想情况下我想知道 South 是否有解决这些问题的机制?或者有什么最佳做法吗?如果我可以通过修改我的迁移而不接触代码库来解决这些问题,那将是很酷的。

(Django 1.3,南 0.7.3)

4

2 回答 2

2

South 在之后的迁移中不持有已删除字段的引用。如果您删除了自定义字段并成功生成了迁移,ImportError可能是因为在删除迁移之前,这些自定义字段仍然被一些未完成的迁移引用。所以

  1. 在执行打包删除和删除迁移之前将代码库更新到版本
  2. 迁移
  3. 更新代码库到删除迁移和迁移
于 2012-04-07T05:38:37.367 回答
1

add_introspection_rules如果已经为这些简单的自定义字段定义了[ 1 ],那么使用 South 0.7+ 非常容易。(在自定义字段类之后的同一模块中),创建迁移时。然后 South 不会“冻结”这些字段,并且可以轻松删除它们。然后,如果 okm 的先前回答对您没有帮助,请重新创建旧的迁移更正。

于 2012-04-07T17:25:09.253 回答