0

I am unable to properly extend the django-allauth sign up form.

The fields I need show up in my sign up form, but the rappa_name field does not get stored in my database.

I followed this thread: How to customize user profile when using django-allauth

But couldn't get it to work.

My forms.py:

from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm


User = get_user_model()


class UserCreationForm(UserCreationForm):

    rappa_name = forms.CharField(label = "Rappa Name")

    class Meta(UserCreationForm.Meta):
        model = User

    def signup(self, request, user):

        user.rappa_name = self.cleaned_data['rappa_name']
        user.save()
        return user

and my models.py


class User(AbstractUser):

    # raooa name of user
    rappa_name = CharField(_("Rappa Name"), default='', max_length=255)

    def get_absolute_url(self):
        return reverse("users:detail", kwargs={"username": self.username})

I made sure that my settings.py has

ACCOUNT_FORMS = {
'signup': 'myproject.users.forms.UserCreationForm',
}

I need the rappa_name to be saved as a field with the user, but it is currently not saving

Dev
  • 103
  • 1
  • 7

1 Answers1

0

Solved: I moved the rappa_name field to my profile and then changed SignupForm to:

class UserCreationForm(SignupForm):

    rappa_name = forms.CharField(max_length=30, label='Rappa Name')

    def save(self, request):

        # Ensure you call the parent classes save.
        # .save() returns a User object.
        user = super(UserCreationForm, self).save(request)

        # Add your own processing here.
        profile = user.profile
        profile.rappa_name = self.cleaned_data['rappa_name']
        profile.save()
        # You must return the original result.
        return user

I followed the docs here https://django-allauth.readthedocs.io/en/latest/forms.html.

Dev
  • 103
  • 1
  • 7