Hello其他程序员,
我想更改formset的min_num
错误消息。
我的代码使用inlineformset_factory:
创建一个formsetformset_clazz = inlineformset_factory(MyParentModel, MyModel, MyModelForm, can_delete=True, min_num=1, validate_min=True)
formset = formset_clazz(data=request.POST)
print(formset._non_form_errors)
if formset.is_valid():
print("yay!")
else:
print("nay!")
return render(request, "mytemplate.html", {'formset':formset})
在模板中,我渲染了non_form_errors:
{% if formset.non_form_errors %}
<ul>
{% for error in form.non_form_errors %}
<li>
{{ error }}
</li>
{% endfor %}
</ul>
{% endif %}
min_num
验证按预期工作,并在用户删除所有表单并提交表单集时显示错误消息Please submit 1 or more forms.
。
我的问题是:如何更改错误消息?
从[0]我了解到,它存储在formset._non_form_errors
,但没有办法覆盖too_few_forms
[1](ctrl -F validate_min
)代码&#39;的消息。 BaseFormSet
类本身使用ngettext
来翻译消息,但我真的不想为此设置国际化(或者那么简单直接吗?)。
有没有更方便的方法来实现我的目标?
[0] Django: Displaying formset errors correctly
[1] https://docs.djangoproject.com/en/2.0/_modules/django/forms/formsets/#BaseFormSet
答案 0 :(得分:3)
您可以在表单集类的full_clean
方法中进行操作。不漂亮,但是可以。
class CheeseStickFormset(BaseFormSet):
def full_clean(self):
super(CheeseStickFormset, self).full_clean()
for error in self._non_form_errors.as_data():
if error.code == 'too_many_forms':
error.message = "Please eat %d or fewer cheese sticks." % self.max_num
if error.code == 'too_few_forms':
error.message = "Please eat at least %d cheese sticks." % self.min_num