Форма Django или сам шаблон не сохраняет картинку профиля
Пытаюсь поменять картинку, но текст сохраняется(first_name, last_name), а картинка нет. Еще к слову вот как находится путь к аватаркам профиля: project/media/avatars/и айди профиля Вот мой код: models.py:
def user_image_dir(instance, filename):
return os.path.join('avatars', f'{instance.user.id}', filename)
class Profile(models.Model):
user = models.OneToOneField(User, null = True, on_delete=models.CASCADE)
photo = models.ImageField(upload_to=user_image_dir, blank=True, default='avatars/default.webp')
views.py:
def profile_edit_page(request):
form = ProfileEditForm(instance=request.user.profile)
if request.method == 'POST':
form = ProfileEditForm(request.POST, request.FILES, instance=request.user.profile)
if form.is_valid():
form.save()
return redirect('todo_list')
context = {'form':form}
return render(request, 'account/profile_edit.html', context)
forms.py:
class ProfileEditForm(forms.ModelForm):
photo = forms.ImageField(widget=forms.ClearableFileInput(attrs={'class':'custom-file-input', 'type':'file', 'id':'customFile'}))
class Meta:
model = Profile
fields = ['first_name', 'last_name', 'email']
мой шаблон:
<form action="{% url 'profile_edit' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="card-body">
<div class="row mb-3">
<div class="col-sm-3">
<h6 class="mb-0">Имя</h6>
</div>
<div class="col-sm-9 text-secondary">
{% render_field form.first_name class="form-control" %}
</div>
</div>
<div class="row mb-3">
<div class="col-sm-3">
<h6 class="mb-0">Фамилия</h6>
</div>
<div class="col-sm-9 text-secondary">
{% render_field form.last_name class="form-control" %}
</div>
</div>
<div class="row mb-3">
<div class="col-sm-3">
<h6 class="mb-0">Почта</h6>
</div>
<div class="col-sm-9 text-secondary">
{% render_field form.email class="form-control" %}
</div>
</div>
<div class="custom-file">
{{form.photo}}
<!-- <label class="custom-file-label" for="customFile">Выберите файл</label> -->
</div>
<div class="row">
<div class="col-sm-3"></div>
<div class="col-sm-9 text-secondary">
<input type="submit" class="btn btn-primary px-4" value="Сохранить изменения">
</div>
</div>
</div>
</form>