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...',
]
попробуйте этот метод работы !