2009-10-01 43 views
0

我不關心併發問題。適用於Google App Engine的基本唯一ModelForm字段

這是比較容易建立獨特的表單字段:

from django import forms 

class UniqueUserEmailField(forms.CharField): 
    def clean(self, value): 
     self.check_uniqueness(super(UniqueUserEmailField, self).clean(value)) 

    def check_uniqueness(self, value): 
     same_user = users.User.all().filter('email', value).get() 
     if same_user: 
      raise forms.ValidationError('%s already_registered' % value) 

這樣一個可以在即時添加用戶。編輯現有的用戶是棘手的。該字段不允許保存具有其他用戶電子郵件的用戶。同時它不允許使用相同的電子郵件保存用戶。您使用什麼代碼將唯一性檢查字段放入ModelForm中?

回答

1

快速和骯髒的方法是:

  1. 化妝check_uniqueness類方法
  2. 使用自定義字段中的ModelForm檢查,像這樣:

    class User(forms.ModelForm):  
        email = forms.EmailField()  
    def clean_email(self): 
        data = self.cleaned_data['email'] 
        original = self.instance.email 
        if original == data: 
         return data 
        UniqueUserEmailField.check_uniqueness(data) 
        return data 
    

更好的選擇?

相關問題