You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 4.2.3:Forms子类自定义西班牙语错误信息不生效求助

问题排查与解决方案

1. 优先排除浏览器原生验证拦截

你看到的默认英文错误提示大概率是浏览器HTML5原生验证的提示,而非Django表单返回的自定义错误。Django默认会给required=True的字段自动添加HTML5的required属性,浏览器会在表单提交前先做验证,直接显示自带提示,不会触发Django后端的错误校验。

解决方法:在模板的<form>标签中添加novalidate属性,禁用浏览器原生验证:

<form method="POST" novalidate>
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

2. 验证Django表单错误是否正确生成

可以在视图中临时添加调试代码,确认表单是否真的生成了你定义的西班牙语错误:

def crear(response):
    form = CreateNewList(response.POST or None)
    if response.method == "POST":
        print(form.errors)  # 在控制台打印错误信息,检查是否为自定义西语内容
        if form.is_valid():
            n = form.cleaned_data["nombre"]
            t = ToDoList(nombre=n)
            t.save()

    return render(response,"main/crear.html", {"form": form})

如果控制台打印的是你设置的西语错误,说明后端没问题,问题出在模板渲染;如果打印的还是默认英文,再检查表单字段的error_messages配置。

3. 检查表单字段参数是否冲突

CharField默认required=True,无需重复声明,避免参数重复可能的冲突,修改表单代码如下:

from django import forms
class CreateNewList(forms.Form):
    nombre = forms.CharField(
        label="Nombre", 
        max_length=200, 
        min_length=3, 
        error_messages = {
            'required': "El campo nombre es requerido", 
            'min_length': "El campo nombre debe ser minimo de 3 caracteres",
            'max_length': "El campo nombre debe ser menor a 200 caracteres"
        }
    )

4. 确认模板正确渲染错误信息

如果模板用了自定义字段渲染,要确保正确显示字段错误:

<div>
    {{ form.nombre.label_tag }}
    {{ form.nombre }}
    {% if form.nombre.errors %}
        <div class="error-text">
            {{ form.nombre.errors.0 }}
        </div>
    {% endif %}
</div>

内容的提问来源于stack exchange,提问作者mashkuil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:05:17