2017-06-17 18 views
2

こんにちは、カスタムユーザーモデルを作成し、フィールドをデータベースに保存するために、検証時にex:phoneと作成されたカスタムアダプタを登録するための新しいフィールドを導入しました。 clean_username()は、既に存在するかどうかを確認するために使用されていますか、そのユーザー名の電話番号を確認する必要があります。ユーザー名と電話番号の両方を同時にチェックします。どのように私は電話をclean_username関数の中に入れることはできません。下のあなたがclean_ {フィールド名}関数にのみ、その特定のフィールドを検証することができallauthアダプタDjango allauth clean_usernameとclean_email関数をオーバーライド

def clean_username(self, username, shallow=False): 
    """ 
    Validates the username. You can hook into this if you want to 
    (dynamically) restrict what usernames can be chosen. 
    """    

    if not USERNAME_REGEX.match(username): 
     raise forms.ValidationError(_("Usernames can only contain " 
             "letters, digits and @/./+/-/_.")) 

    # TODO: Add regexp support to USERNAME_BLACKLIST 
    username_blacklist_lower = [ub.lower() 
           for ub in app_settings.USERNAME_BLACKLIST] 
    if username.lower() in username_blacklist_lower: 
     raise forms.ValidationError(_("Username can not be used. " 
             "Please use other username.")) 
    # Skipping database lookups when shallow is True, needed for unique 
    # username generation. 
    if not shallow: 
     username_field = app_settings.USER_MODEL_USERNAME_FIELD 
     #appuuid_field = app_settings.USER_MODEL_APPID_FIELD 
     assert username_field 
     user_model = get_user_model() 
     try: 
      query = {username_field + '__iexact': username}     
      user_model.objects.get(**query)  
     except user_model.DoesNotExist: 
      return username 
     raise forms.ValidationError(
      _("This username is already taken. Please choose another.")) 
    return username 
+0

あなたのきれいな機能は次のようになります – karthi

答えて

0

ジャンゴでclean_username機能です。あなたのケースでは、検証メカニズムが異なるフィールドにまたがっているので、clean関数をオーバーライドする必要があります。どのように私は、ユーザー名とそれに沿って検証するclean_username機能にフォームからの電話の詳細情報を取得することができ

from allauth.account.forms import SignupForm as AllAuthSignupForm 

class SignupForm(AllAuthSignupForm): 
    def clean(self): 
     super(SignupForm, self).clean() 
     username = self.cleaned_data.get("username") 
     phone = self.cleaned_data.get("phone") 
     if not self._custom_username_phone_check(username, phone) and not self.errors: 
      raise forms.ValidationError(_("Your username and phone do not match.")) 
     return self.cleaned_data 
関連する問題