2009-10-01 3 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

신속하고 더러운 방법은 다음과 같습니다 같은 ModelForm에서

  1. 메이크업의 check_uniqueness의 classmethod
  2. 사용하여 사용자 정의 필드 체크 :

    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 
    

더 나은 옵션?