2017-04-05 52 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