【问题标题】:Django, Models & Forms: replace "This field is required" messageDjango,模型和表单:替换“此字段为必填项”消息
【发布时间】: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'”,这对我来说就足够了。

请帮忙。

【问题讨论】:

    标签: django forms


    【解决方案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__ 方法中更改字段属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 2011-12-02
      • 2010-11-11
      • 2021-12-14
      • 2020-02-03
      • 1970-01-01
      相关资源
      最近更新 更多