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()
Вернуться на верх