Я работаю над профилями пользователей, где пользователь может загружать изображения в формате jpg в качестве изображений своего профиля Но загруженные изображения не хранятся ни в моем каталоге мультимедиа, ни на сервере. Вместо этого он продолжает отображать «фотографию по умолчанию». Я настроил MEDIA_ ROOT и MEDIA_URL в моем файле настроек, а также добавил в файл URL, он все еще не работает. Я новичок в Django, любая помощь будет оценена.
Вот мой профиль models.py:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
def save(self):
super().save()
image=Image.open(self.image.path)
if image.height >300 or image.width > 300:
output_size=(300,300)
image.thumbnail(output_size)
image.save(self.image.path)
views.py:
def profile(request):
if request.method=='POST':
update_form=UserUpdateForm(request.POST, instance=request.user)
profile_form=ProfileUpdateForm(request.POST, request.FILES ,instance=request.user)
if update_form .is_valid() and profile_form.is_valid():
update_form.save()
profile_form.save()
messages.success(request, f'Your account has been updated!!')
return redirect('profile')
else:
update_form=UserUpdateForm(instance=request.user)
profile_form=ProfileUpdateForm(instance=request.user)
context={
'update_form': update_form,
'profile_form':profile_form,
}
return render(request, 'users/profile.html', context)
. html:
<div class="card" id="profile" style="width: 18rem;">
<img class="card-img-top" src="{{ user.profile.image.url }}" alt="Default photo">
<div class="card-body">
<h2 class="account-heading">{{ user.username }}</h2>
<p class="text-secondary">{{ user.email }}</p>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4"><h1>Profile Info</h1></legend>
{{ update_form|crispy }}
{{ profile_form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-oultline-info" type="submit"> Update </button>
</div>
</form>
</div>
settings.py:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'