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")