У меня есть модель (/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, но я не могу понять, как это исправить.