【问题标题】:How can I override the 'unique' error on a ModelForm field?如何覆盖 ModelForm 字段上的“唯一”错误?
【发布时间】:2014-02-25 06:26:03
【问题描述】:

我正在尝试覆盖我的 ModelForm 中某个字段的“唯一”错误消息。我正在尝试关注 Django 1.6 的 docs,但我无法让它工作。很简单的东西,我有:

models.py:

class EmailAddress(Model):
    """An email address."""
    address = EmailField(unique=True)

    def __unicode__(self):
        return self.address

views.py:

class EmailAddressForm(ModelForm):
    class Meta:
        model = EmailAddress
        fields = {'address'}
        error_messages = {
            'address': {
                u'unique': _('That address has already been added.'),
            }
        }

如果我输入重复的电子邮件,我会收到:

emailaddress_form.errors = {'address': [u'Email address with this Address already exists.']}.`

我已经深入研究了源代码,据我所知,我将error_messages dict 正确传递到元类调用的django.forms.models.fields_for_model 函数将接收它的位置。希望我遗漏了一些明显的东西。有什么建议吗?

【问题讨论】:

    标签: django django-forms django-1.6


    【解决方案1】:

    试试这个:-

    将地址字段更改为:-

    address = models.EmailField(unique=True, error_messages={'unique':"该地址已添加。"})

    【讨论】:

    • 我希望得到一个使用 ModelForm error_messages 属性的答案,但在 Django 修复该明显错误之前,这是最接近和最简单的解决方法。
    【解决方案2】:

    在 EmailAddressForm 类上创建一个方法“clean_address”,希望这能解决您的问题。

    def clean_address(self):
      """Prevent duplicate email addresses."""
      if 'email' in self.changed_data:
          if self.Meta.model.all().filter('address =', self.cleaned_data['address']).count():
            raise forms.ValidationError('Email address with this Address already exists.: %s.' %
                                         self.cleaned_data['address'])
      return self.cleaned_data['address']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 2018-02-01
      • 2011-02-25
      • 1970-01-01
      • 2017-05-07
      • 2010-12-02
      • 1970-01-01
      相关资源
      最近更新 更多