2014-04-25 7 views
5

Voglio fare qualche validazione extra sui campi in django-allauth. Ad esempio, voglio impedire l'uso di indirizzi email gratuiti. Quindi voglio eseguire questo metodo all'iscrizioneConvalida modulo personalizzato in Django-Allauth

def clean_email(self): 
    email_domain = self.cleaned_data['email'].split('@')[1] 
    if email_domain in self.bad_domains: 
     raise forms.ValidationError(_("Registration using free email addresses is prohibited. Please supply a different email address.")) 

Analogamente, desidero eseguire la convalida personalizzata su diversi campi diversi dall'indirizzo di posta elettronica. Come posso eseguire questo?

risposta

4

Ci sono alcuni adattatori nella configurazione di allauth. Ad esempio questo:

ACCOUNT_ADAPTER (="allauth.account.adapter.DefaultAccountAdapter") 
    Specifies the adapter class to use, allowing you to alter certain default behaviour. 

È possibile specificare un nuovo adattatore sovrascrivendo quello predefinito. Basta ignorare il metodo clean_email.

class MyCoolAdapter(DefaultAccountAdapter): 

    def clean_email(self, email): 
     """ 
     Validates an email value. You can hook into this if you want to 
     (dynamically) restrict what email addresses can be chosen. 
     """ 
     *** here goes your code *** 
     return email 

quindi modificare l'ACCOUNT_ADAPTER sul settings.py

ACCOUNT_ADAPTER = '**app**.MyCoolAdapter' 

controllare il comportamento di default su: https://github.com/pennersr/django-allauth/blob/master/allauth/account/adapter.py

+0

Per rifiutare un indirizzo email, sollevare un'eccezione 'django.forms.ValidationError' . – Flimm

+0

come si fa su un altro campo modulo? – Hakim