Пользовательская форма регистрации Django-Allauth не добавляет новых пользователей

#python-3.x #django #django-forms #django-allauth

#python-3.x #django #django-forms #django-allauth

Вопрос:

Я попытался создать пользовательскую форму регистрации с помощью allauth, но когда я отправляю форму на интерфейсе, она перенаправляет на success_url и после проверки в панели администратора новый пользователь не был создан.

 # forms.py
from allauth.account.forms import SignupForm


class SimpleSignupForm(SignupForm):
    mobile_number = PhoneNumberField(required=True)
    first_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}), max_length=255, required=True)
    last_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}), max_length=255, required=True)
    address = AddressField(required=True)
    type = forms.ModelChoiceField(queryset=UserType.objects.all())

    def save(self, request):
        user = super(SimpleSignupForm, self).save(request)
        user.mobile = self.cleaned_data['mobile_number']
        user.address = self.cleaned_data['address']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.type = self.cleaned_data['type']
        user.save()
        return user

    def __init__(self, *args, **kwargs):
        super(SimpleSignupForm, self).__init__(*args, **kwargs)
        visibles = self.visible_fields()
        visibles[0].field.widget.attrs['class'] = 'form-control'

  
 # settings.py
ACCOUNT_FORMS = {'signup': 'my_app_path.forms.SimpleSignupForm'}
  

В файле шаблона я убедился <form> , что тег есть method='POST' и что я включил {% csrf_token %} в форму. Кнопка также является submit типом A. Я также убедился {{ form.as_p }} , что при отправке есть все необходимые поля. Нигде не появляется ошибок или предупреждений.

Комментарии:

1. Вы решили эту проблему? Внутри save метода выведите в файл журнала cleaned_data , чтобы убедиться, что этот метод вызывается.

2. Я создал совершенно новый проект, пытаясь создать пользовательскую форму регистрации, которая работает, и она работает в новом проекте, я провел тщательное сравнение между двумя проектами строка за строкой, и ничего не изменилось. Я предполагаю, что это могла быть нарушенная настройка проекта за пределами django framework. Честно говоря, не имеет смысла, что произошло

3. Я вижу. Вы всегда можете автоматизировать различия с помощью git (или diff). Содержимое базы данных также было согласовано между версиями? В любом случае, сейчас это что-то не так.

4. Я использовал функцию сравнения двух файлов Pycharm. Но приятно знать, что у git есть эта функция 🙂 запомнит это в следующий раз

Ответ №1:

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

 class CustomSignupForm(forms.Form):
first_name = forms.CharField(max_length=30, label='First Name')
last_name = forms.CharField(max_length=30, label='Last Name')

def __init__(self, *args, **kwargs):
    super(CustomSignupForm, self).__init__(*args, **kwargs)
    self.fields['first_name'].widget.attrs['placeholder'] = 'First Names'
    self.fields['last_name'].widget.attrs['placeholder'] = 'Last Names'

def signup(self, request, user):
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.save()