在我的Django模型我创建了一个小数点场这样的:只允许正十进制数
price = models.DecimalField(_(u'Price'), decimal_places=2, max_digits=12)
显然是没有意义的价格为负或为零。有没有办法将十进制数限制为只有正数?
还是我捕捉到了这个使用表单验证?
在我的Django模型我创建了一个小数点场这样的:只允许正十进制数
price = models.DecimalField(_(u'Price'), decimal_places=2, max_digits=12)
显然是没有意义的价格为负或为零。有没有办法将十进制数限制为只有正数?
还是我捕捉到了这个使用表单验证?
price = models.DecimalField(_(u'Price'), decimal_places=2, max_digits=12, validators=[MinValueValidator(Decimal('0.01'))])
你可以做这样的事情:
# .....
class priceForm(ModelForm):
price = forms.DecimalField(required=False, max_digits=6, min_value=0)
这,也就是RESPONSABLE为“价格”
按照文档的验证值,似乎没有办法在字段上放置类似数据库约束的东西。你能做的最好是添加模式“验证”如果你调用模型验证或使用ModelForm
将被调用。如果您只是将值放入一个对象并且save()
,则验证程序会被跳过。
所以,你可以在表单添加验证,或者你可以添加验证,也得到在形式层面,如果你使用ModelForm
运行模型。
从docs on "How validators are run":
见他们是如何在模型运行form validation的更多信息,如何验证的运行形式 和Validating objects。需要注意的是验证不会自动当您保存模型, 运行 ,但如果你用的是
ModelForm
,它将对包含在表单的任何 域运行你的校验。见ModelForm documentation 有关如何模型验证与表单交互。
现货。如果你想在db中创建对象时触发此验证。重写模型的save()方法以运行self.full_clean() – surfer190
或者您可以添加'min_value = Decimal('0.01')' – Martin
这对表单字段有效,但我没有测试'min_value = Decimal('0.01')'模型字段。它没有记录在[模型字段文档](https://docs.djangoproject.com/en/1.7/ref/models/fields/)中。 – Alasdair
我站好了。我的评论回答关于表单验证的最后一个问题。 models.DecimalField上不适用'min_value'。 – Martin