Souvik Ray
Souvik Ray

Reputation: 3018

Form field not getting stored in Django User model

I have a signup form which I have defined below

forms.py

from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django import forms

class SignUpForm(UserCreationForm):
    display_name = forms.CharField(max_length=30, required=True, help_text='Please provide a display name for your profile')
    class Meta:
        model = User
        fields = ('username', 'password1', 'password2', 'display_name')

In the views.py, I handle the signup process

views.py

from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from .forms import SignUpForm
from django.shortcuts import render, redirect


@csrf_exempt
def signup_users(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            username = form.cleaned_data.get('username')
            display_name = form.cleaned_data.get('display_name')
            raw_password = form.cleaned_data.get('password1')

            user.set_password(raw_password)
            user.display_name = display_name
            user.save()
            user = authenticate(username=username, password=raw_password)
            print("signup authencticate", user)
            login(request, user)
            return render(request, 'index.html')
    else:
        form = SignUpForm()
    return render(request, 'signup.html', {'form': form})

The user is able to signup successfully however their display_name doesn't get stored in the django User model.Even in the django admin, I do not see the field display_name.I have even performed a query like serializers.serialize("json",User.objects.filter(username=username)) but even here it shows every other field except the display_name.

What am I doing wrong?

Upvotes: 0

Views: 38

Answers (1)

bruno desthuilliers
bruno desthuilliers

Reputation: 77902

Well quite simply the django.contrib.auth.models.User model has not field named display_name so of course it doesn't get saved. If you want to add fields to your User model you'll have to provide a custom User model.

Upvotes: 2

Related Questions