社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

无法在django中编辑用户配置文件和更改自定义用户的密码

Jin • 2 年前 • 146 次点击  

我在django项目中有一个自定义的用户模型。我可以使用基于此模型的表单创建用户,但无法编辑和更改密码。我怎样才能做到这一点?

创建了如下所示的自定义用户模型。

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)

我尝试使用此表单编辑用户的配置文件并更改密码。

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')

对应的views.py文件

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)

表单与模板配合得很好,但没有根据我提供的输入进行更新。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/158645
 
146 次点击