2014-02-25 67 views
1

我想重寫我的ModelForm中的字段的'唯一'錯誤消息。我試圖按照Django 1.6的docs,但我無法讓它工作。很簡單的東西,我有:如何覆蓋ModelForm字段上的'唯一'錯誤?

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字典正確傳遞到它將被選中的位置。由Metaclass調用的django.forms.models.fields_for_model函數。希望我失去了一些明顯的東西。有什麼建議麼?

回答

0

試試這個: -

更改地址字段設置爲: -

地址= models.EmailField(唯一=真,error_messages = { '獨一無二':「這個地址已經被添加。 「})

+0

我希望得到一個使用ModelForm error_messages屬性的答案,但這是最接近和最簡單的解決方法,直到Django修復這個明顯的錯誤。 – Symmetric

0

在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']