Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django-allauth: Module "accounts.forms" does not define a "SignupForm" class

I am getting the following error:

django.core.exceptions.ImproperlyConfigured: Module "accounts.forms" does not define a "SignupForm" class

settings.py

(...)

ACCOUNT_SIGNUP_FORM_CLASS = 'accounts.forms.SignupForm'

(...)

accounts/forms.py

from allauth.account.forms import BaseSignupForm

class SignupForm(BaseSignupForm):

    def __init__(self, *args, **kwargs):
        self.sociallogin = kwargs.pop('sociallogin')
        user = self.sociallogin.account.user
        first_name = forms.CharField(label=_('First name'),
                                     max_length=30,
                                     min_length=2,
                                     widget=forms.TextInput(attrs={
                                         'placeholder':_('First name')}))
        last_name = forms.CharField(label=_('Last name'),
                                     max_length=30,
                                     min_length=2,
                                     widget=forms.TextInput(attrs={
                                         'placeholder':_('Last name')}))
        second_last_name = forms.CharField(label=_('Second last name'),
                                     max_length=30,
                                     empty='',
                                     widget=forms.TextInput(attrs={
                                         'placeholder':_('Second last name')}))
        # TODO: Should become more generic, not listing
        # a few fixed properties.
        initial = {'email': user_email(user) or '',
                   'username': user_username(user) or '',
                   'first_name': user_field(user, 'first_name') or '',
                   'last_name': user_field(user, 'last_name') or ''}
        kwargs.update({
            'initial': initial,
            'email_required': kwargs.get('email_required',
                                         app_settings.EMAIL_REQUIRED)})
        super(SignupForm, self).__init__(*args, **kwargs)

    def save(self, request):
        adapter = get_adapter()
        user = adapter.save_user(request, self.sociallogin, form=self)
        # TODO: Add request?
        super(SignupForm, self).save(user)
        return user

    def raise_duplicate_email_error(self):
        raise forms.ValidationError(
            _("An account already exists with this e-mail address."
              " Please sign in to that account first, then connect"
              " your %s account.")
            % self.sociallogin.account.get_provider().name)
like image 545
blaze Avatar asked Dec 26 '13 12:12

blaze


2 Answers

Sir you are victim of Circular Import. allauth tries to import your custom signup form class from accounts.forms but in the same file you are importing from allauth from allauth.account.forms import BaseSignupForm. You don't need to extend your SignupForm from BaseSignupForm. Just create a simple form and allauth will automatically extend it for you.

like image 107
Aamir Rind Avatar answered Nov 15 '22 11:11

Aamir Rind


Just inherit from forms.Form and add the signup function.

class CustomSignupForm(forms.Form):
    def signup(self, request, user):
        pass

ACCOUNT_SIGNUP_FORM_CLASS = 'app.forms.CustomSignupForm'
like image 25
Tobias Lorenz Avatar answered Nov 15 '22 11:11

Tobias Lorenz