我删除了一个包含我项目中的几个自定义字段的应用。现在,当我尝试运行迁移时,我自然会得到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
因此,它们都不包含任何数据库级别的自定义。
当我删除此代码时,我创建了迁移,因此后续迁移都运行良好。但是当我尝试在删除前的数据库上运行它时,我意识到了我的错误。
我可以重新创建一个简单的应用程序并使这些导入工作,但理想情况下我想知道南方是否有解决这些问题的机制?或者有最佳做法吗?如果我只是通过修改我的迁移而不是触及代码库来解决这些问题,那将会很酷。
(Django 1.3,South 0.7.3)
答案 0 :(得分:2)
South在后续迁移中不保留已删除字段的引用。如果您删除了自定义字段并成功生成了迁移,ImportError
可能是由于在删除迁移之前某些已撤消的迁移仍然引用了这些自定义字段。所以
答案 1 :(得分:1)
如果已经为他们定义add_introspection_rules
[1],则使用South 0.7+这样的简单自定义字段非常容易。 (在自定义字段类之后的同一模块中),创建迁移时。然后南方没有"冻结"这些字段可以轻松删除。然后,如果来自okm的先前答案对您没有帮助,请重新创建旧的迁移校正。