我有一个Django形式的以下字段:
area = forms.FloatField(required=False, min_value=0, max_value=100)
如何设置独占的最低限额和包含的最高限额?
The Django page on this form没有提及排他性与包容性的任何内容。看一下源代码让我觉得这不是直接内置到Django中的。我对吗?如果是这样,我怎么能解决这个问题?
答案 0 :(得分:4)
编写自定义验证器来执行此操作。它们并不复杂,MinValueValidator
中现有的MaxValueValidator
和django.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