2017-07-03 58 views
2

我试图创建一个子类DecimalField使用下面子类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' 

任何帮助表示赞赏。

感谢,

埃里克

回答

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) 
0

看来,初始化在DecimalField预期不同的呼叫。试试这个:

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) 
+0

它产生同样的错误 –

+0

@埃里克 - 阿塞韦多,现在试试,也期待在源代码https://github.com/django/django/blob/master/django/db/models/fields/__init__.py#L1427 – kingdaemon

+0

该替代方案仍然会产生错误。 –