0

並行性の問題は気にしません。

独自のフォーム フィールドを作成するのは比較的簡単です。

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 に入れるために使用するコードは何ですか?

4

1 に答える 1

1

迅速で汚い方法は次のようになります:

  1. check_uniquenessclassmethodを作成します
  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
    

より良いオプション?

于 2009-10-01T10:00:58.590 に答える