Django,模型和表单:替换“此字段为必填项”消息

Posted

技术标签:

【中文标题】Django,模型和表单:替换“此字段为必填项”消息【英文标题】:Django, Models & Forms: replace "This field is required" message 【发布时间】:2011-07-20 02:02:32 【问题描述】:

我知道在使用普通 Django 表单时如何设置自己的自定义错误消息。但是基于现有模型的 Django Form 呢?考虑以下模型和形式:

Class MyModel(models.Model):
    name = models.CharField(max_length='30')

Class MyForm(forms.ModelForm):
    Class Meta:
        model = MyModel

如果我创建这样的表单并尝试发布它,则会出现消息“此字段是必需的”。但是如何改变呢?当然我可以这样做:

Class MyForm(forms.ModelForm):
    model = forms.CharField(error_messages = 'required': "something...")
    Class Meta:
        model = MyModel

但根据文档,不会保留 max_length 属性,我必须将其显式写入表单定义。我认为 Model Forms 的目的是避免两次编写相同的代码。因此,必须有一些简单的方法来更改自定义错误消息,而无需重写整个表单。基本上,如果我的消息看起来像“需要字段 'name'”,这对我来说就足够了。

请帮忙。

【问题讨论】:

【参考方案1】:
class MyForm(forms.ModelForm):
    class Meta:
            model = MyModel

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['name'].error_messages = 'required': 'custom required message'

        # if you want to do it to all of them
        for field in self.fields.values():
            field.error_messages = 'required':'The field fieldname is required'.format(
                fieldname=field.label)

【讨论】:

谢谢,看起来不错。但是我的印象是,您确实避免了两次编写相同的代码,而是编写了一些实际上更长且更丑陋的代码;)尽管如此,它至少在大型表单上会节省一些工作,所以再次感谢。 我猜每个人都有自己的想法。如果您需要替换所有required 消息,这是迄今为止最干净的。我也不认为它会更长,除非你算上 init 调用,我通常在所有事情中都使用它。 请注意,如果您收到 invalid 错误并且不提供消息,您将收到 a mysterious KeyError @Dan 是的,我得到了那个神秘的 KeyError。我认为field.error_messages['required'] ='The field fieldname is required'.format(fieldname=field.label) 行会更好。 对我不起作用它仍然会出现“请填写此字段”:(【参考方案2】:

您可以在运行时在__init__ 方法中更改字段属性。

【讨论】:

以上是关于Django,模型和表单:替换“此字段为必填项”消息的主要内容,如果未能解决你的问题,请参考以下文章

Django 表单:当文件发布到带有 enctype 的文件字段时,“此字段是必需的”

如何验证此多步骤表单

最简单的 JQuery 验证规则示例

“这是必填栏。” DRF

无法更改 CakePHP 2.3 中的默认错误消息

更改跨度文本值 JavaScript/jQuery