Как обновить данные пользователя в пользовательской модели пользователя в django

Я только что создал пользовательскую модель пользователя из abstractuser. Я могу создать пользователя, но обновление не работает, показывая какую-то ошибку. Я также не владею английским, поэтому не знаю, как поделиться своей проблемой. Короче говоря, я хочу отредактировать email и пароль пользователя.

###This is my user model

class User(AbstractUser):
    roles =(
       ('Admin','Admin'),
        ('Placement Manager','Placement Manager'),
        )
    username=models.CharField(max_length=100,null=True,blank=True)
    email = models.EmailField(max_length=50, null=True,blank=True)
    phone = models.IntegerField(unique=True)
    role = models.CharField(max_length=100,choices = roles,null=True,blank=False)
    USERNAME_FIELD = 'phone'
    REQUIRED_FIELDS = ['email','username','role']

    objects=UserManager()

    def get_username(self):
        return self.email 
 ###This is my view 

def editPlacementManager(request):

    if request.method=='POST':
        name=request.POST.get('name')
        phone=request.POST.get('phone')
        email=request.POST.get('email')
        password=request.POST.get('password')
        userid = request.POST.get('pmId')

        User.objects.get(id=userid).update(username=name,phone=phone,email=email,password=password,role='Placement Manager')
        

        return redirect('listplacementmanager')
    return render(request,"index/placementmanager.html")
### The error is 

AttributeError at /editplacementmanager
'User' object has no attribute 'update'

Да, вы получите эту ошибку, потому что метод update доступен только для querysets. Поэтому вы можете сделать следующее:


def editPlacementManager(request):

    if request.method=='POST':
        name=request.POST.get('name')
        phone=request.POST.get('phone')
        email=request.POST.get('email')
        password=request.POST.get('password')
        userid = request.POST.get('pmId')

        user = User.objects.get(id=userid)
        user.name = name
        user.phone = phone
        user.email = email
        # You can continue with whichever field you want
        user.save()
        # Then finally you save the object with the updated fields
        

        return redirect('listplacementmanager')
    return render(request,"index/placementmanager.html")

На самом деле это простая вещь, просто хэшируйте пароль при обновлении.

Вернуться на верх