Почему я не могу обновить изображение в django?
modle.py
class Form(models.Model):
name = models.CharField(max_length=40)
email = models.EmailField()
file = models.ImageField(null=True, blank=True)
class Meta:
db_table: 'django' # table name
edit.py
<form action="{% url 'update' user.id %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="mb-3">
<label for="exampleFormControlInput1" class="form-label">Name</label>
<input type="text" class="form-control" id="exampleFormControlInput1" placeholder="name" name="name" value="{{ user.name }}">
</div>
<div class="mb-3">
<label for="exampleFormControlInput" class="form-label">Email address</label>
<input type="email" class="form-control" id="exampleFormControlInput" placeholder="name@example.com" name="email" value="{{ user.email }}">
</div>
<div class="mb-3">
<label for="exampleFormControlInput2" class="form-label">Image</label>
<input type="file" class="form-control" id="exampleFormControlInput2" name="{{ user.file }}" >
</div>
<div class="mb-3">
<img src="{{ user.file.url }}" alt="" srcset="" style="width:100px">
</div>
<button type="submit" class="btn btn-primary" id="liveToastBtn">submit</button>
</form>
view.py когда я пытаюсь обновить все поля все обновляется и также удаляет старое изображение но не сохраняет новое изображение в каталог пожалуйста помогите мне
.
def update(request, user_id):
user = Form.objects.get(id=user_id)
form = UserForm(request.POST, request.FILES, instance=user)
if request.method == 'POST':
if form.is_valid():
if os.path.exists(user.file.path):
os.remove(user.file.path)
form.save()
return redirect("listing")
else: # mean form is invalid
return render(request, 'edit.html', {'user': user})
В теге file вы установили name="{{ user.file }}" замените его на name="file" как
<input type="file" class="form-control" id="exampleFormControlInput2" name="file">
Атрибуты name вашей html должны соответствовать field имени вашей модели.
Ошибка в этой строке
<input type="file" class="form-control" id="exampleFormControlInput2" name="{{ user.file }}">
{{user.file}} - это данные пользователя, поэтому он показывает данные только в том случае, если вы хотите изменить файл
<input type="file" class="form-control" id="exampleFormControlInput2" name="file">