Python South ValueError:无法成功为模型创建字段:';模块';对象没有属性<;CustomClassAttributeHere>;

Python South ValueError:无法成功为模型创建字段:';模块';对象没有属性<;CustomClassAttributeHere>;,python,django,django-south,Python,Django,Django South,我有一个使用自定义类作为属性的模型(/core/models/milestone.py): from core.models.IntegerRangeField import IntegerRangeField class milestone(models.Model): name = models.CharField(max_length=128, null=False, blank=False) completion = IntegerRangeFi

我有一个使用自定义类作为属性的模型(/core/models/milestone.py):

from core.models.IntegerRangeField import IntegerRangeField

    class milestone(models.Model):
        name = models.CharField(max_length=128, null=False, blank=False)
        completion = IntegerRangeField(min_value=0,max_value=100, null=False, default=0, blank=True)
        due_date = models.DateField(null=False, blank=False)
        phase = models.ForeignKey('project_phase',null=False, blank=False)
        last_updated_date = models.DateTimeField(null=False, blank=True, default=datetime.now())

        def __unicode__(self):
            return self.name
(实际上还有更多的代码-)

它使用的自定义类是:

from django.db import models

class IntegerRangeField(models.IntegerField):
    def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs):
        self.min_value, self.max_value = min_value, max_value
        models.IntegerField.__init__(self, verbose_name, name, **kwargs)
    def formfield(self, **kwargs):
        defaults = {'min_value': self.min_value, 'max_value':self.max_value}
        defaults.update(kwargs)
        return super(IntegerRangeField, self).formfield(**defaults)

    class Meta:
        app_label = 'core'

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^core\.models\.IntegerRangeField\.IntegerRangeField"])
有了这个布局,我可以运行django控制台,导入里程碑并使用它

但是,当我运行manage.py schemamigration core--auto时,我会出现以下错误:

ValueError:无法成功为模型“里程碑”创建字段“完成”:“模块”对象没有属性“IntegerRangeField”。

没有任何更新


我觉得这与交叉导入django.db.models有关,但我不知道如何解决这个问题。

所以,我想:

代码很好,问题是由我做的一些重构引起的(自定义字段类最初位于tools模块中,我希望它位于所有其他模型和东西中)

迁移文件包含以下字符串:

('completion', self.gf('core.tools.IntegerRangeField')(default=0, blank=True)),
我认为这在某种程度上把南方搞得一团糟,让我们继续寻找core.tools.integragerangefield,尽管它已经不在了


我把IntegerRangeField放回tools.py中,一切都解决了。奇怪。

在上次为您迁移的应用程序中,如果您更改

('completion', self.gf('core.tools.IntegerRangeField')(default=0, blank=True)),


然后您的迁移将重新开始工作

我已经将IntegerRangeField从core/models/移动到core/tools.py并更改了导入(就像我之前做过一些重构一样,有趣的是它仍然不起作用)
('completion', self.gf('newpackage.newmodule.IntegerRangeField')(default=0, blank=True)),