Django: html-форма отправки, уникальная для каждого элемента в списке
В шаблоне моего проекта я использую цикл for
для перебора каждого объекта в модели. Каждому объекту нужна кнопка рядом с ним, которая будет удалять этот объект из модели. Таким образом, каждая кнопка должна быть связана с определенным объектом, и нажатие на эту кнопку будет сообщать views.py, какой объект был вылизан, и удалять этот объект.
models.py:
class Obj(models.Model):
name = models.Charfield(max_length=255)
template.html:
{% for object in objects %}
{{object.name}}<br>
<form method="post" action=".">
<button type="submit">Select</button>
</form>
{% endfor %}
views.py:
def delete(request):
objects = Obj.objects.all()
if request.method == 'POST':
# Get the specific object that the form was submitted for
# Remove the object from the model (which removes it from the html list as well)
return render(request, 'template.html', {'objects', objects})
Вам нужно отправить id вашего объекта вместе с запросом. Поэтому вы добавляете идентификатор объекта в форму:
{% for object in objects %}
{{object.name}}<br>
<form method="post" action=".">
{% csrf_token %} {# Don't forget this one ! #}
<button type="submit" name="object-id" value="{{ object.pk }}">Select</button>
</form>
{% endfor %}
Затем вы удаляете объект из своего представления:
from django.http import Http404, HttpResponseNotAllowed
def delete(request):
if request.method == 'POST':
try:
obj = Object.objects.get(pk=request.POST.get('object-id')
except Object.DoesNotExist:
raise Http404()
obj.delete()
return reverse('...')
return HttpResponseNotAllowed()