Django view doesn't save form changes

Django 5.2, python 3.12.5 . I'm using in-built user model and no errors appear when I press the submit button. I created a view based on UpdateView and use the built-in UserChangeForm. The form actually returns 200 response code. I suspect something is wrong with how the form is bound or saved, but I see no errors or warnings. Urls are okay. My other login/register forms work well.

views.py

from django.views import generic
from django.contrib.auth import login
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm, UserChangeForm
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User

class ProfileView(generic.edit.UpdateView, LoginRequiredMixin):
    template_name = 'users/profile.html'
    form_class = UserChangeForm
    success_url = '/profile/'
    model = User

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Profile | Jotter'
        return context

    def form_valid(self, form):
        form.save()
        return super().form_valid(form)

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['instance'] = self.request.user
        return kwargs

    def get_object(self):
        return self.request.user

profile.html

{% extends "base.html" %}

{% block content %}
    <main class="py-5">
        <div class="container">
            <div class="row">

                <form action="" method="post" class="col-md-6 mx-auto">
                    {% csrf_token %}

                    <h2 class="mb-5">Account details</h2>


                    <div class="row mb-4">

                        <div class="col-md-4 mx-2">
                            <label for="username_label" class="form-label">Username</label>
                            <input type="text" class="form-control" style="background: #dfdfdf;" id="username_label" name="username" value="{{form.username.value}}" readonly>
                        </div>
                    
                    </div>


                    <div class="row mb-5">

                        <div class="col-md-4 mx-2">
                            <label for="first_name_label" class="form-label">First name</label>
                            <input type="text" class="form-control" id="first_name_label" name="first_name" value="{{form.first_name.value}}">
                        </div>

                        <div class="col-md-4 mx-2">
                            <label for="last_name_label" class="form-label">Last name</label>
                            <input type="text" class="form-control" id="last_name_label" name="last_name" value="{{form.last_name.value}}">
                        </div>

                    </div>


                    <div class="row">

                        <div class="col-md-4 mx-2">
                            <button type="submit" class="btn btn-primary">Save changes</button>
                        </div>

                    </div>  

                </form>
            </div>
        </div>
    </main>
{% endblock content %}

Honestly, no clue.

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