gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:22:51 25 4
gpt4 key购买 nike

我有这个模型和模型:

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")

我在 View 中像这样使用它们:
  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_% 方法。您应该使用 validator .

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 有效的原因。空表格 are createdempty_permitted=True .这意味着他们 will pass validation .覆盖其中任何一个,你就会得到你想要的。

关于django - 为什么我的自定义验证没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6356861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com