【问题标题】:Django: Change formset error message(s)Django:更改表单集错误消息
【发布时间】:2018-06-26 23:31:39
【问题描述】:

各位程序员,大家好,

我想更改表单集的min_num 错误消息。

我的代码使用 inlineformset_factory 创建了一个表单集:

formset_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) 代码的消息。 BaseFormSet 类本身使用 ngettext 来翻译消息,但我真的不想为此设置国际化(或者这很简单直接?)。

有没有更方便的方法来实现我的目标?

[0]Django: Displaying formset errors correctly

[1]https://docs.djangoproject.com/en/2.0/_modules/django/forms/formsets/#BaseFormSet

【问题讨论】:

  • 我也想覆盖代码“too_few_forms”和“too_many_forms”的消息。相关部分为here

标签: python django


【解决方案1】:

您可以在表单集类的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

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2021-04-15
    • 2015-07-27
    • 2016-09-04
    • 2015-05-28
    • 1970-01-01
    • 2019-05-27
    • 2021-09-15
    相关资源
    最近更新 更多