django-allauth-переопределение формы регистрации по умолчанию

Я использую этот код (в forms.py) для моей пользовательской формы регистрации для allauth:

class RegistrationForm(UserCreationForm):
    birth_date = forms.DateField(widget=extras.SelectDateWidget(years=BIRTH_DATE_YEARS))

    class Meta:
        model = get_user_model()
        fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'gender', 'birth_date', 'city', 'country')

Я, конечно, указано ACCOUNT_SIGNUP_FORM_CLASS in settings.py чтобы указать на эту форму, и она отображает поля, которые я поместил в нее. Однако он не работает на подчинение, даже если я ставлю signup метод никогда не вызывается. Я пробовал с save но все равно это то же самое-это вызывает ошибку, что одно из моих пользовательских добавленных полей пусто при создании пользователя и сохранении его в база данных. Итак, каков правильный код для достижения этого?

2 ответов


Я сделал это спасибо @rakwen кто нашел правильное решение здесь. Я написал свой пользовательский адаптер и вставил его adapters.py в моем приложении:

from allauth.account.adapter import DefaultAccountAdapter

class AccountAdapter(DefaultAccountAdapter):
    def save_user(self, request, user, form, commit=False):
        data = form.cleaned_data
        user.username = data['username']
        user.email = data['email']
        user.first_name = data['first_name']
        user.last_name = data['last_name']
        user.gender = data['gender']
        user.birth_date = data['birth_date']
        user.city = data['city']
        user.country = data['country']
        if 'password1' in data:
            user.set_password(data['password1'])
        else:
            user.set_unusable_password()
        self.populate_username(request, user)
        if commit:
            user.save()
        return user

тогда я указал ACCOUNT_ADAPTER in settings.py чтобы указать на этот адаптер, и он, наконец, начал работать!


в вашем проекте setting.py попробуйте добавить эту строку:

проверить, если вы добавили это:

AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend",
    "allauth.account.auth_backends.AuthenticationBackend",
)

ACCOUNT_SIGNUP_FORM_CLASS = "yourapp.forms.customSignupForm"

в приложение.модели

class CustomModel(models.Model):
    """CustomModel docstring."""

    city = forms.CharField(max_length=75)
    country = forms.CharField(max_length=25)
    other....

в приложение.формы:

class SignForm(forms.ModelForm):
    """SignForm docstring."""

    username = forms.CharField(
        max_length=30,
    )
    first_name = forms.CharField(
        max_length=30,
    )
    last_name = forms.CharField(
        max_length=30,
    )
    field...

    def myclean():

    def signup(self, request, user):
        """You signup function."""


    # dont forget to save your model

    class Meta:
        model = mymodel.CustomModel
        fields = [
            'city',
            'country',
            'field...',
        ]

попробуйте этот метод работы !