在我的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