Пользовательская форма регистрации Django с пользовательской моделью - PullRequest
0 голосов
/ 17 января 2019

Итак, у меня есть проект, в котором используется пользовательская модель пользователя. Модель пользователя по умолчанию расширена для использования модели профиля с отношением OneToOne к модели пользователя.

Я бы хотел использовать django allauth для проверки адресов электронной почты и добавления входа в социальную сеть.

У меня есть некоторые проблемы с пользовательской регистрацией, я прочитал следующее Как настроить профиль пользователя при использовании django-allauth , но не совсем понятно, как это реализовать, я получаю ошибку;

Объект 'GuestSignUpForm' не имеет атрибута 'save'

Я искал на форуме, и, кажется, нет "официальной" документации о том, как это сделать, некоторые люди используют ModelForms, другие наследуют от SignUpView, некоторые регистрируют def, а другие используют def save ...

Я попытался настроить UserModel по умолчанию с помощью UserCreationForm, и у меня не было проблем, мне просто нужно немного разъяснить внутреннюю работу пакета allauth

models.py

# Custom Usermodel 
class User(AbstractUser):
    pass

# Custom Profile model to store additional info
class Profile(models.Model):
    prefix = models.CharField(_('prefix'), max_length=8, blank=True, default="")
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    # Other fields left out for readability

    def __str__(self):
        if self.prefix:
            return '%s %s, %s' % (self.user.last_name, self.prefix, self.user.first_name)
        else:
            return '%s %s' % (self.user.last_name, self.user.first_name)

# Create a profile record on save
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    else:
        instance.profile.save()

forms.py

from django import forms
from allauth.account.forms import SetPasswordField, PasswordField

from .models import User, Profile

class GuestSignUpForm(forms.Form):
    first_name = forms.CharField(max_length=30)
    prefix = forms.CharField(max_length=8, required=False)
    last_name = forms.CharField(max_length=150)
    email = forms.EmailField(required=True)
    password1 = SetPasswordField()
    password2 = PasswordField()

    def signup(self, request, user):
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()
        profile = Profile.objects.get(user=user)
        profile.prefix = self.cleaned_data.get['prefix']
        profile.save()
        return user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...