子类化DecimalField

时间:2017-07-03 02:35:55

标签: python django python-3.x subclassing

我尝试使用下面的代码创建DecimalField子类

class PositiveMoneyField(DecimalField):
    def __init__(self, verbose_name=None, name=None, **kwargs):
        super().__init__(self,
            verbose_name, name,
            max_digits=9, decimal_places=2,
            validators=[MinValueValidator(Decimal(0.0)), ],
            **kwargs
    )

但它给了我这个错误:

TypeError: __init__() got multiple values for argument 'max_digits'

感谢任何帮助。

谢谢,

埃里克

2 个答案:

答案 0 :(得分:0)

似乎DecimalField中的 init 需要不同的调用。试试这个:

class PositiveMoneyField(DecimalField):
    def __init__(self, verbose_name=None, name=None, **kwargs):
        kwargs.update(
            {'validators': [MinValueValidator(Decimal(0.0)), ]})
        super(PositiveMoneyField, self).__init__(verbose_name, name, max_digits=3, decimal_places=2, **kwargs)

答案 1 :(得分:0)

在检查其他django字段为SlugField后,我找到了解决方案:

class PositiveMoneyField(DecimalField):

    def __init__(self, *args, max_digits=9, decimal_places=2, **kwargs):
        kwargs.update({'validators': [MinValueValidator(Decimal(0.01)), ]})
        super().__init__(*args, max_digits=max_digits, decimal_places=decimal_places, **kwargs)