为什么没有调用我的自定义验证?

| 我有这个模型和模型形式:
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])
未调用我的验证程序。     
已邀请:
        据我所知,模型不使用clean_%方法。您应该使用验证器。
def validate_min_length(value):
    if len(value) <= 5:
        raise ValidationError(\"must have 5 chars at least\")

class Comment(models.Model):
    text = models.CharField(max_length=100, validators=[validate_min_length])
编辑:答案很简单:在formset表单中所有字段中都没有数据的表格将被忽略。这就是表单集有效的原因。用
empty_permitted=True
创建空表格。这意味着它们将通过验证。覆盖其中任何一个,您将获得所需的内容。     

要回复问题请先登录注册