Индивидуальная социальная форма - PullRequest
0 голосов
/ 22 мая 2018

У меня есть пользовательская форма, уже работающая для обычного входа (с электронной почтой), теперь у меня проблема с социальной.

Следуя официальной документации

from allauth.socialaccount.forms import SignupForm
class MyCustomSocialSignupForm(SignupForm):

    def save(self):

        # Ensure you call the parent classes save.
        # .save() returns a User object.
        user = super(MyCustomSocialSignupForm, self).save()

        # Add your own processing here.

        # You must return the original result.
        return user

А мой код следующий:

settings.py

ACCOUNT_SIGNUP_FORM_CLASS = 'accounts.forms.SignupFormEmail'
SOCIALACCOUNT_FORMS = {'signup': 'accounts.forms.SignupFormSocial'}

forms.py

class SignupFormEmail(forms.Form):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['localizacion'].label = 'Categorias'

    localidades = Alcance.objects.exclude(pk=1).filter(zona_afectada=Alcance.CONCEJO)

    localizacion = forms.ModelChoiceField(queryset=localidades, label='Concejo',empty_label="Selecciona tu concejo")

    def signup(self, request, user: User):
        self.user=user
        user.residencia.add(self.cleaned_data['localizacion'])
        user.save()



class SignupFormSocial(SignupForm):

    localidades = Alcance.objects.exclude(pk=1).filter(zona_afectada=Alcance.CONCEJO)

    localizacion = forms.ModelChoiceField(queryset=localidades, label='Concejo', empty_label="Selecciona tu concejo")

    def __init__(self, sociallogin=None, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['localizacion'].label = 'Categorias'


    def save(self,request):
        # Ensure you call the parent classes save.
        # .save() returns a User object.
        user = super(SignupFormSocial, self).save() 
        # Add your own processing here.
        user.residencia.add(self.cleaned_data['localizacion'])
        user.save()

        # You must return the original result.
        return user

Проблема в том, что я получаю следующее исключениеdjango.core.exceptions.ImproperlyConfigured: Ошибка при импорте класса формы account.forms: «невозможно импортировать имя« BaseSignupForm »»

Я также пытаюсь унаследовать от form.Form и от RegistrationFormEmail, но ни один из них не работает

Как это сделать?

Обновлен с установленными приложениями в настройках:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    # Django AllAuth
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.twitter',
    #My apps
    'accounts.apps.AccountsConfig',

1 Ответ

0 голосов
/ 12 июня 2018

В конце я обнаружил проблему,

все аутентификации По умолчанию

SOCIALACCOUNT_AUTO_SIGNUP = True

Я не знаю, почему, это интерпретировало, что локализация атрибута была дана социальнымаккаунт, когда его не было.

Поэтому решение состояло в том, чтобы установить значение false и использовать обычный способ настройки формы ( подробнее здесь )

ACCOUNT_SIGNUP_FORM_CLASS = 'accounts.forms.SignupForm'
SOCIALACCOUNT_AUTO_SIGNUP = False 
...