2017-06-17 2 views
2

Hallo habe ich ein benutzerdefiniertes Benutzermodell erstellt und neue Felder für die Registrierung eingeführt, sagen für ex: phone und erstellt benutzerdefinierten Adapter, um das Feld in der Datenbank zu speichern, aber zum Zeitpunkt der Validierung. clean_username() wird verwendet, um zu überprüfen, ob der Benutzername bereits existiert oder nicht. Ich muss die Telefonnummer für diesen Benutzernamen überprüfen. Überprüfen Sie also gleichzeitig Benutzernamen und Telefonnummer. Wie kann ich das Telefon nicht innerhalb clean_username Funktion bekommen. die unten ist die clean_username Funktion in django allauth AdapterDjango Allauth überschreiben clean_username und clean_email Funktion

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

wie kann ich das Telefon Details aus dem Formular in clean_username Funktion es zu validieren auszukommen mit Benutzername – karthi

Antwort

0

Sie nur, dass bestimmte Feld in der clean_ {Feldname} Funktion überprüfen kann. In Ihrem Fall müssen Sie die Bereinigungsfunktion überschreiben, da sich Ihr Überprüfungsmechanismus über verschiedene Felder erstreckt.

Ihre Clean-Funktion wird wie folgt aussehen:

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