Изменение изображения пользователя при обновлении времени в django

Я создаю профиль пользователя для обучения. при обновлении изображение пользователя по умолчанию не меняется.

но имя пользователя и email меняются на новое имя пользователя и email. только изображение пользователя не меняется.

Если я изменю изображение профиля на странице администратора, оно изменится, но на странице обновления не изменится.

Я не могу найти проблему, где она находится.

извините за грамматические ошибки :)

/models.py

from django.db import models
from django.contrib.auth.models import User
from PIL import Image

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(
        default='user.png', upload_to='static/images')

    def __str__(self):
        return self.user.username

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)
/forms.py
from django import forms
from .models import UserProfile
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class UserForm(UserCreationForm):
   

class UpdateUser(forms.ModelForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ('username', 'email')


class UpdateProfile(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('image', )
/views.py
from .models import UserProfile
from django.contrib import messages
from django.shortcuts import render, redirect
from .forms import UserForm, UpdateUser, UpdateProfile
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate, logout
# Create your views here.


def Home(request):
    if request.user.is_authenticated:
        user = request.user
        user, created = UserProfile.objects.get_or_create(user=user)

    u_profile = UserProfile.objects.all()
    return render(request, 'main/Home.html', context={'profile': u_profile})


def SignUp_function(request):


def Login_function(request):
    

def LogOut_function(request):
    

@login_required
def Update_function(request):
    if request.method == 'POST':
        u_user = UpdateUser(request.POST, instance=request.user)
        u_profile = UpdateProfile(
            request.POST, request.FILES, instance=request.user.userprofile)
        if u_user.is_valid() and u_profile.is_valid():
            u_user.save()
            u_profile.save()
            print('com')
            messages.success(request, 'Updated USER')
            return redirect('App:Home')
    else:
        print('error')
        u_user = UpdateUser(instance=request.user)
        u_profile = UpdateProfile(instance=request.user.userprofile)

    context = {
        'u_user': u_user,
        'u_profile': u_profile,
    }
    return render(request, 'register/settings.html', context)
/urls.py
from django.urls import path
from .views import (Home,
                    SignUp_function,
                    Login_function,
                    LogOut_function,
                    Update_function
                    )
from django.conf import settings
from django.conf.urls.static import static

app_name = 'App'


urlpatterns = [
    path('', Home, name='Home'),
    path('signup', SignUp_function, name='SignUp'),
    path('login', Login_function, name='LogIn'),
    path('logout', LogOut_function, name='LogOut'),
    path('update', Update_function, name='Update'),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)
/settings.html
{% extends 'register/index.html' %}
{% load bootstrap5 %}

{% block content %}

<div class="row my-4">
  <div class="col-md-7 m-auto">
    <form class="" action="" method="post">
      <a href="{% url 'App:Home' %}" class="btn btn-outline-secondary my-3">↰Back To Home</a>
      <div class="user text-center my-3">
        <a href="{{ user.userprofile.image.url }}">
          <img src="{{ user.userprofile.image.url }}" class="img-fluid rounded-start" width="150" alt="PROFILE IMAGE">
        </a>
        <h4>{{ user.username }}</h4>
        <small><code>{{user.email}}</code></small>
      </div>
      {% csrf_token %}
      {% bootstrap_form u_profile %}
      {% bootstrap_form u_user %}
      <div class="d-grid gap-2">
        <button class="btn btn-outline-primary btn-sm" type="submit">Update</button>
      </div>
    </form>
  </div>
</div>


{% endblock content %}

полный код: Если вы хотите увидеть его >> https://github.com/ZohidilloPr/Accounts

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