Django如何写正片Cimalfield

Django如何写正片Cimalfield,django,django-models,django-validation,Django,Django Models,Django Validation,我想写一封肯定的信 这是我的密码: from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from django.db.models import DecimalField from decimal import * def validate_positive_decimal(value): try: deci

我想写一封肯定的信

这是我的密码:

from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _

from django.db.models import DecimalField
from decimal import *

def validate_positive_decimal(value):
    try:
        decimal_value = Decimal(value)

        if decimal_value < 0:
            raise ValidationError(_('{val} should be a positive decimal number'.format(val = decimal_value)), code='negative decimal')

    except (ValueError, TypeError):
        raise ValidationError(_('Enter a valid decimal or integer value'), code='invalid decimal')


class PositiveDecimalField(DecimalField):
    default_validators = [validate_positive_decimal]

    def __init__(self, *args, **kwargs):

        super(DecimalField, self).__init__(*args, **kwargs)

    def validators(self):
        return super(PositiveDecimalField, self).validators + [validate_positive_decimal]
我得到的错误是:

super(DecimalField, self).__init__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'max_digits'
我在文档中查看了Django的DecimalField的源代码。我还试图将验证器validate_positive_decimal传递给DecimalField,但它没有针对它进行验证


我需要在这里做什么?

我通常定义以下字段:

pos_float_field = models.FloatField(validators=[MinValueValidator(0.0)])
这样比较干净

Doc:

您在
\uuuu init\uuu
中对
super()
的调用应该是

super(PositiveDecimalField, self).__init__(*args, **kwargs)
而不是

super(DecimalField, self).__init__(*args, **kwargs)
super(DecimalField, self).__init__(*args, **kwargs)