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,模型和表单:替换“此字段为必填项”消息的主要内容,如果未能解决你的问题,请参考以下文章