2017-04-05 88 views
1

我有一個領域的一些示例模型:Django的使用模式場對客戶端驗證驗證

class Task(models.Model): 
    priority = models.IntegerField(default=30, validators=[MinValueValidator(0), MaxValueValidator(300)]) 

當我通過modelform_factory()函數創建一個ModelForm對象併產生.as_table()功能HTML那麼對於這個領域我得到的東西像:

<input type="number" name="priority" value="30" required="" id="id_priority"> 

但我想輸出看起來像這樣:

<input type="number" name="priority" value="30" required="" id="id_priority" min="0" max="300"> 

這樣做的最佳方法是什麼?

+0

從快速查看源代碼,它看起來好像Django會添加'min'和'max'的形式輸入,如果你創建一個'IntegerField' formfield用'min_value'和'max_value',例如'priority = forms.IntegerField(default = 30,min_value = 0,max_value = 300)'。但是,這對您自動從模型創建表單的情況無效。 – Alasdair

+0

這絕對是我正在尋找的。所以,只能通過手動創建'forms.IntegerField'來設置'min_value'和'max_value'? – szafranskid

+0

據我所見,最簡單的方法是在表單字段上設置'min_value'和'max_value',可以繼承'models.IntegerField'並覆蓋'formfield'方法。 – Alasdair

回答

1

您是否添加了正確的導入?

from django.core.validators import MaxValueValidator, MinValueValidator 

priority = models.IntegerField(default=30, validators=[MinValueValidator(0), MaxValueValidator(300)]) 
+0

是的,我用它,因爲你看到。這應該夠了嗎?它不適合我。 – szafranskid

+0

注意:驗證器在保存模型時不會自動運行,但如果使用的是ModelForm,它將在表單中包含的字段上運行驗證器。查看此鏈接瞭解更多信息。 https://docs.djangoproject.com/ja/1.9/ref/contrib/postgres/fields/#range-fields – Surajano