У меня есть эта модель и модель формы:
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])
Мой валидатор не вызывается.