Почему мой просмотр удаления удаляет только последнюю запись?
Я пытаюсь заставить представление delete_entry удалить нужную запись, однако, какую бы кнопку delete я ни нажимал, она ссылается на один и тот же item_id. Я изменил представление так, что оно печатает удаляемую запись, а не удаляет ее, и какую бы кнопку я ни выбрал из списка, она выбирает одну и ту же запись.
Есть ли что-то в моем представлении, что не работает? Моя функциональность редактирования работает как ожидалось, так что стоит ли просто изменить delete_entry, чтобы он работал так же, как EditHealth?
Health_hub_history.html:
{% for item in stats %}
<tr>
<td>{{ item.user }}</td>
<td>{{ item.weight }} </td>
<td>{{ item.date }}</td>
<td>{{ item.run_distance }}</td>
<td>{{ item.run_time }}</td>
<!-- Button trigger modal -->
<td>
<a href="edit/{{ item.id }}"><button type="button" class="btn btn-primary">
Edit
</button>
</a>
</td>
<td>
<button type="button" class="btn btn-danger" data-bs-toggle="modal"
data-bs-target="#staticBackdrop">
Delete
</button>
</td>
<!-- Modal -->
<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false"
tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Are you sure you want to delete
this entry?</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"
aria-label="Close"></button>
</div>
<div class="modal-body">
If you just need to amend something, try the edit button.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-bs-dismiss="modal">Cancel</button>
<a href="delete/{{ item.id }}"><button class="btn btn-danger">I'm
sure</button></a>
</div>
</div>
</div>
</div>
</tr>
{% endfor %}
Views.py:
def delete_entry(request, item_id):
entry = get_object_or_404(HealthStats, id=item_id)
print(entry)
# entry.delete()
return redirect("HealthHub:health_hub_history")
class EditHealth(UpdateView):
model = HealthStats
template_name = 'health_hub_edit.html'
fields = ['weight', 'run_distance', 'run_time']
Urls.py:
urlpatterns = [
path('', views.home, name='home'),
path('MyHealth/', views.health_hub, name='health_hub'),
path('MyHealth/update', views.UpdateHealth.as_view(), name='health_hub_update'),
path('MyHealth/history', views.health_history, name='health_hub_history'),
path('favicon.ico', RedirectView.as_view(url=staticfiles_storage.url("favicon.ico"))),
path('MyHealth/delete/<item_id>', views.delete_entry, name='health_hub_delete'),
path('MyHealth/edit/<int:pk>', views.EditHealth.as_view(), name='health_hub_edit'),
]
Любая помощь будет принята с благодарностью!
Ваша проблема заключается в id для staticBackdrop в DOM, там не должно быть одинаковых id. Вам просто нужно добавить что-то к id:
<td>
<button type="button" class="btn btn-danger" data-bs-toggle="modal"
data-bs-target="#staticBackdrop_{{item.id}}">
Delete
</button>
</td>
<!-- Modal -->
<div class="modal fade" id="staticBackdrop_{{item.id}}" data-bs-backdrop="static" data-bs-keyboard="false"
tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Are you sure you want to delete
this entry?</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"
aria-label="Close"></button>
</div>
<div class="modal-body">
If you just need to amend something, try the edit button.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-bs-dismiss="modal">Cancel</button>
<a href="delete/{{ item.id }}"><button class="btn btn-danger">I'm
sure</button></a>
</div>
</div>
</div>
</div>
Я добавил item.id к id модала. Это предотвратит множественные одинаковые идентификаторы в DOM.