Как добавить "функцию редактирования" в django
Мне нужно добавить кнопку редактирования в мое приложение django, но она только перенаправляет меня на домашнюю страницу, и никакие изменения не сохраняются.
вот мой код views.py, я думаю, что проблема возникает именно здесь
def editPhoto (request, pk):
photo = Photo.objects.get(id=pk)
categories = Category.objects.all()
if request.method == 'POST':
description = request.FILES.get('description')
photo.save()
return redirect ('/')
context = {'categories': categories, 'photo': photo}
return render(request, 'photos/edit.html', context)`
models.py
class Category(models.Model): name = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return self.name
class Photo(models.Model): category = models.ForeignKey( Category, on_delete=models.SET_NULL, null=True, blank=True) image = models.ImageField(null=False, blank=False) description = models.TextField()
def __str__(self):
return self.description`
edit.html
<div class="container"> <div class="row justify-content-center"> <div class="col">
<a href="{% url 'gallery' %}" class="btn btn-dark my-3">Go Back</a>
<form method='POST' action="" enctype="multipart/form-data">
{% csrf_token %}
<div style="height: 90vh;">
<img style="max-width: 100%; max-height: 100%;" src="{{photo.image.url}}" class="center" >
</div>
<div>
<input required name="description" class="input" value="{{photo.description}}" type="text" size="60"></input>
</div>
<div class="center">
<button type="submit" class="btn btn-primary m-3; center">Update</button>
</div>
</div>
</div>
</div>`
Проблема в том, что вы не сохраняете никаких изменений в вашей модели.
description = request.FILES.get('description')
photo.save()
это следует изменить на
photo.description = request.POST.get('description')
photo.save()
Проблема в том, что вы не передаете id фотографии, которую хотите редактировать, из вашего html-файла.
в Edit.html в форме action="{% url photo.id %} , и внесите изменения, если необходимо, в файл urls.py.
тем самым id будет передан в views.py, который действует как pk.
.