#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()