Изменение изображения пользователя при обновлении времени в 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