我在 Django 表单中有以下字段:
area = forms.FloatField(required=False, min_value=0, max_value=100)
如何使最小限制不包括在内,最大限制包括在内?
此表单上的 Django 页面没有提及任何关于排他性与包容性的内容。查看源代码让我觉得这不是直接内置到 Django 中的。我对吗?如果是这样,我该如何解决这个问题?
我在 Django 表单中有以下字段:
area = forms.FloatField(required=False, min_value=0, max_value=100)
如何使最小限制不包括在内,最大限制包括在内?
此表单上的 Django 页面没有提及任何关于排他性与包容性的内容。查看源代码让我觉得这不是直接内置到 Django 中的。我对吗?如果是这样,我该如何解决这个问题?
编写一个自定义验证器来完成它。它们并不复杂,现有MinValueValidator
和MaxValueValidator
indjango.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
您还可以为该字段编写自定义方法。
我会在您的表单中编写一个自定义的 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 文档
然后,只需将您的字段重新定义为:
area = forms.FloatField(required=False) # see additional clean field method