Моя Discount
модель описывает общие поля для всех типов скидок в системе.У меня есть несколько прокси-моделей, которые описывают конкретный алгоритм подсчета итогов.Базовый класс Discount
имеет поле члена с именем type
, которое представляет собой строку, идентифицирующую его тип и связанный класс.
class Discount(models.Model):
TYPE_CHOICES = (
('V', 'Value'),
('P', 'Percentage'),
)
name = models.CharField(max_length=32)
code = models.CharField(max_length=32)
quantity = models.PositiveIntegerField()
value = models.DecimalField(max_digits=4, decimal_places=2)
type = models.CharField(max_length=1, choices=TYPE_CHOICES)
def __unicode__(self):
return self.name
def __init__(self, *args, **kwargs):
if self.type:
self.__class__ = getattr(sys.modules[__name__], self.type + 'Discount')
super(Discount, self).__init__(*args, **kwargs)
class ValueDiscount(Discount):
class Meta:
proxy = True
def total(self, total):
return total - self.value
Но я продолжаю получать исключение AttributeError, говоря, что self не имеет типа.Как это исправить или есть другой способ добиться этого?