Cannot edit user profile and change password of the custom user in django
I have a custom user model in my django project. I can create users using the form based on this model but I'm unable to edit and change the passwords. How can I make this possible?
Created the custom user models as shown below.
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
class Role(models.TextChoices):
ADMIN = 'ADMIN', 'Admin'
DEVELOPER = 'DEVELOPER', 'Developer'
TESTER = 'TESTER', 'Tester'
base_role = Role.ADMIN
role = models.CharField(max_length=20, choices= Role.choices)
def save(self, *args,**kwargs):
if not self.pk:
self.role = self.base_role
return super().save(*args, **kwargs)
I tried to edit the user the profile and change password using this form.
from django.contrib.auth.forms import UserCreationForm
from .models import User
from django import forms
class RegisterUserForm(UserCreationForm):
email = forms.EmailField()
first_name = forms.CharField(max_length=50)
last_name = forms.CharField(max_length=50)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email','role', 'password1', 'password2')
class EditUserForm(forms.ModelForm):
email = forms.EmailField()
first_name = forms.CharField(max_length=50)
last_name = forms.CharField(max_length=50)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email')
corresponding views.py file
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.views.decorators.cache import never_cache
from .forms import RegisterUserForm, EditUserForm
from django.views import generic
from django.urls import reverse_lazy
from django.contrib.auth.views import PasswordChangeView
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.messages.views import SuccessMessageMixin
class EditProfileView(generic.UpdateView, SuccessMessageMixin):
form_class = EditUserForm
template_name = 'edit_profile.html'
success_url = reverse_lazy('home')
def get_object(self):
return self.request.user
def form_valid(self, form):
messages.success(self.request, 'Updated Successfully!')
return super().form_valid(form)
class PasswordsChangeView(PasswordChangeView):
form_class = PasswordChangeForm
template_name = 'change_password.html'
success_url = reverse_lazy('home')
def form_valid(self, form):
messages.success(self.request, 'Password changed successfully')
return super().form_valid(form)
The forms are working fine with the templates but it's not getting updated based on the input I've given.