2010-11-05 125 views
0

我有一個EmailField(primary_key=True)。我正在使用ModelForm將表單呈現給用戶,並且在回帖後我致電form.is_valid()Django ModelForm is_valid()錯誤類型

我在這個字段上看到兩種類型的錯誤。一個是主鍵上的唯一值約束(該電子郵件地址已存在)。另一個是無效的電子郵件地址錯誤。

我想對每個錯誤做出不同的迴應。是否有一種簡單的方法可以確定驗證失敗是由於實際的輸入格式錯誤還是唯一的約束?

回答

2

我想出瞭如何實現我想要的。我的目標是避免唯一的約束,以便在提交重複的電子郵件地址的情況下,我可以靜靜地忽略表單提交併成功(從用戶的角度來看,因爲他們的提交是一個noop)。

首先覆蓋我的ModelForm定義中的validate_unique方法。

from django.forms import ModelForm 
from apps.announcer.models import Subscriber 

class SubscribeForm(ModelForm): 
    class Meta: 
     model = Subscriber 
     exclude = ('created',) 

    def validate_unique(self): 
     pass 

由於validate_unique方法已轉換爲一個空操作的視圖將必須執行它需要的任何驗證。所以不要致電form.save()致電entity = form.save(commit=False)。對實體執行所需的驗證,並在需要時調用entity.save()

1

您可以先檢查預先存在的鑰匙,然後撥打is_valid()

+0

有沒有辦法做is_valid沒有執行唯一約束驗證? – 2010-11-05 05:13:51

+0

IIRC,唯一的約束是由數據庫執行的,只要你點擊數據庫,可能不會。 – 2010-11-05 12:53:28