Python Django: получение данных из модала дает ошибку <built-in function id>

Я пытаюсь получить значение из модального окна, которое получает значение с помощью jQuery из списка.

Давайте объясним.

У меня есть список объектов в HTML-странице с использованием цикла for, и в каждой строке есть кнопка удаления.

Эта кнопка удаления запускает модальное окно подтверждения.

Чтобы получить id строки и использовать его в Modal, я использую jQuery:

{% for a in objects %}
[...]
<td><button type="button" class="delete-button" data-name="{{ a.id }}" data-bs-toggle="modal" data-bs-target="#deleteModal">Delete</button></td>
[...]
{% endfor %}

[...]

<div class="modal fade" id="deleteModal">
[...]
<form action="{% url 'delete_object' %}" method="post">
{% csrf_token %}
<input type="hidden" name="object_id" name="object_field" />
<button type="submit">Delete</button>
[...]

<script>
    $('.delete-button').click(function() {
        $('#object_id').html($(this).data('name'))
    })
</script>

Не объясняя часть urls.py, перейдем непосредственно к представлению, которое довольно просто:

def cancel_request(request):
    _id = request.POST.get("object_id")
    obj = Object.objects.get(id=id)
    obj.status = "Annulé"
    obj.save()
    return redirect("home")

Когда я запускаю модал, я убеждаюсь, что могу видеть значение id, попадающее в модал, но когда я пытаюсь поместить его в input, я больше не могу его видеть. Если я помещаю его в тег h5, например: <h5 class="modal-title" id="request_id" name="requestid_kw"></h5>, оно отображается в модале, но все равно не передается в представление. Когда я выполняю кнопку, я получаю следующую ошибку:

TypeError at /cr
Field 'id' expected a number but got <built-in function id>.

Вот полный отслеживание:

Я увидел одну ошибку, вы определили name два раза в скрытом поле ввода внутри тега form в Html. Если посмотреть на код jQuery, кажется, что следующий код будет правильным, попробуйте его.

Файл шаблона:

{% for a in objects %}
[...]
<td><button type="button" class="delete-button" data-name="{{ a.id }}" data-bs-toggle="modal" data-bs-target="#deleteModal">Delete</button></td>
[...]
{% endfor %}

[...]

<div class="modal fade" id="deleteModal">
[...]
<form action="{% url 'delete_object' %}" method="post">
{% csrf_token %}
<input type="hidden" id="object_id" name="object_field" />
<button type="submit">Delete</button>
[...]

<script>
    $('.delete-button').click(function() {
        $('#object_id').html($(this).data('name'))
    })
</script>

views.py

def cancel_request(request):
    if request.method=="POST": # Or you can use require_post decorator.
        id = request.POST.get("object_field")
        obj = get_object_or_404(Object,id=id)
        obj.status = "Annulé"
        obj.save()
        return redirect("home")
Вернуться на верх