表单字段的独家限制

时间:2013-08-08 23:32:31

标签: python django django-forms

我有一个Django形式的以下字段:

area = forms.FloatField(required=False, min_value=0, max_value=100)

如何设置独占的最低限额和包含的最高限额?

The Django page on this form没有提及排他性与包容性的任何内容。看一下源代码让我觉得这不是直接内置到Django中的。我对吗?如果是这样,我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:4)

编写自定义验证器来执行此操作。它们并不复杂,MinValueValidator中现有的MaxValueValidatordjango.core.validators将为您提供一个良好的起点。

https://docs.djangoproject.com/en/dev/ref/validators/#writing-validators

class ExclusiveMinValueValidator(BaseValidator):
    compare = lambda self, a, b: a <= b
    message = _(u'Ensure this value is greater than %(limit_value)s.')
    code = 'min_value'

您还可以为该字段编写自定义clean方法。

答案 1 :(得分:2)

我会在你的表单中写一个自定义的clean_field方法,如下所示:

def clean_area(self):
    data = self.cleaned_data['area']
    if (data > 0 and data <= 100):
        return ValidationError("Some custom message alerting the user!")
    return data

该方法只需返回您想要的值,请参阅Django docs

然后,只需将您的字段重新定义为:

area = forms.FloatField(required=False)  # see additional clean field method