为什么没有调用我的自定义验证?
|
我有这个模型和模型形式:
class Comment(models.Model):
text = models.CharField(max_length=100)
def clean_text(self):
print \"called Comment\"
if len(self.text) <= 5:
raise ValidationError(\"must have 5 chars at least\")
class CommentForm(ModelForm):
class Meta:
model = Comment
def clean_text(self):
print \"called CommentForm\"
if len(self.text) <= 5:
raise ValidationError(\"must have 5 chars at least\")
而且我在视图中像这样使用它们:
CommentFormSet = modelformset_factory(model=Comment,form=CommentForm,extra=3)
if request.method == \"POST\":
formset = CommentFormSet(request.POST)
if formset.is_valid():
print \"VALID FORM\"
else:
formset = CommentFormSet()
return render_to_response(\"first.html\",{\"formset\":formset},context_instance=RequestContext(request))
这是我的模板:
<form action=\"first\" method=\"post\">
{% csrf_token %}
{% for dict in formset.errors %}
{% for error in dict.values %}
{{ error }}
{% endfor %}
{% endfor %}
<table>
{{ formset }}
</table>
<input type=\"submit\" value=\"Create\"/>
</form>
问题是,我的验证从未被调用过。我有3条评论,我可以立即添加,如果他们的文本字段为空,django说没问题。我在做什么不对?
编辑:带有验证程序的变体:
def validate_min(val):
print \"validator called\"
if len(val) <= 5:
raise ValidationError(\"At least 5 characters should be provided\")
class Comment(models.Model):
text = models.CharField(max_length=100,validators=[validate_min])
未调用我的验证程序。
没有找到相关结果
已邀请:
1 个回复
青董据零
编辑:答案很简单:在formset表单中所有字段中都没有数据的表格将被忽略。这就是表单集有效的原因。用
创建空表格。这意味着它们将通过验证。覆盖其中任何一个,您将获得所需的内容。