Django 1.4 - 在元字段 Model=User 的表单中向用户字段添加自定义错误消息

Posted

技术标签:

【中文标题】Django 1.4 - 在元字段 Model=User 的表单中向用户字段添加自定义错误消息【英文标题】:Django 1.4 - Add custom error message to user fields in form with meta field Model=User 【发布时间】:2012-05-02 22:27:50 【问题描述】:

我试图将一些自定义错误消息添加到这样的表单中:

class RegistrationForm(forms.ModelForm):

    class Meta:
        model = User  
        fields = ('email',)

    extra_field = forms.CharField(error_messages=
        'required':'Este campo es requerido'
    )     

将自定义错误消息添加到在表单 (extra_field) 中声明的字段没有问题,但我无法将自定义错误消息添加到通过 meta 从模型 User 继承的字段类 (email)。

我真正想要的是自定义此表单的所有错误消息。另外,我想用西班牙语而不是英语来显示它们。

到目前为止,我还没有找到任何关于如何自定义从模型 User 继承的表单字段的文档,我真的不想仅仅因为错误消息而编写新表单。

提前致谢!!!

PD:我在 debian 挤压盒中使用 Django 1.4 和 python 2.6.6。

【问题讨论】:

将自定义错误添加到error_messages dict 有什么好处?你可以做raise forms.ValidationError('The important message') 【参考方案1】:

好的,谢谢大家的回答,其实你们帮了我很多!!!

我解决了这样的问题:

假设我有这个表格:

class RegistrationForm(forms.ModelForm):

  class Meta:
    model = User  
    fields = ('username', 'email')

我想向用户名字段添加自定义错误消息,但我不想放弃该字段已经附带的所有验证。

我将此方法添加到我的 RegistrationForm 类中:

def clean_username(self):
    data = self.cleaned_data

    # My extremely important validation.
    if len(data['username']) == 5:

      self.fields['username'].error_messages["myerror"] = "The important message"
      raise forms.ValidationError(self.fields['username'].error_messages["myerror"])

    return data['username']

这种方法的优点是我不会丢失已与相关字段一起提供的其他验证检查。

这很重要,因为现在我不必验证用户是否已存在于我的数据库中。

感谢您的回复,祝您有美好的一天!!!

【讨论】:

【参考方案2】:

在您的 settings.py 中打开内部化

USE_I18N = True
LANGUAGE_CODE = 'es'

型号User 与其他型号没有区别。输入您的代码以找出问题所在。 在您的元类中fields = ('email') 必须是元组或列表,即fields = ('email', )

【讨论】:

您好San4ez,非常感谢您的回答,我已经修复了元类的字段值,以及国际化问题,但是,我仍然不知道如何自定义用户的模型表单无需修改其代码。【参考方案3】:

您可以覆盖任何继承的字段,只需以与定义额外字段完全相同的方式重新定义它们。

【讨论】:

这种方法的问题是我会放弃该字段附带的所有预先存在的验证规则。例如,假设我重新定义了字段用户名。我必须手动提供与该用户名的唯一性相关的所有验证。

以上是关于Django 1.4 - 在元字段 Model=User 的表单中向用户字段添加自定义错误消息的主要内容,如果未能解决你的问题,请参考以下文章

django ORM model filter 条件过滤,及多表连接查询反向查询,某字段的distinct

django ORM model filter 条件过滤,及多表连接查询反向查询,某字段的distinct

Django-ORM操作

Django:如何选择具有相同字段值的对象?

Django - 管理员中的 UserProfile m2m 字段 - 错误

Django 1.4:如何忽略 loaddata 中的字段、模型