Enhance bulk delete functionality to support multiple checkbox naming conventions and improve debug information display when no items are deleted.
This commit is contained in:
+25
-3
@@ -161,19 +161,34 @@ def bulk_delete_questions(request):
|
||||
return HttpResponse(status=405)
|
||||
|
||||
app = request.POST.get("app")
|
||||
selected_list = request.POST.getlist("selected")
|
||||
|
||||
# Accept different submission patterns: checkboxes may be sent as 'selection' or 'selected'
|
||||
selected_list = []
|
||||
# common variants
|
||||
for key in ("selected", "selection", "selected[]", "selection[]"):
|
||||
vals = request.POST.getlist(key)
|
||||
if vals:
|
||||
# extend list; we'll parse ints below
|
||||
selected_list.extend(vals)
|
||||
|
||||
# Also accept a raw CSV string under 'selected'
|
||||
selected_raw = request.POST.get("selected")
|
||||
|
||||
ids = set()
|
||||
if selected_list:
|
||||
for s in selected_list:
|
||||
# some checkbox libraries may give empty strings or 'on' for checked boxes
|
||||
try:
|
||||
ids.add(int(s))
|
||||
except Exception:
|
||||
# ignore non-int vals
|
||||
continue
|
||||
elif selected_raw:
|
||||
for part in selected_raw.split(','):
|
||||
try:
|
||||
part = part.strip()
|
||||
if not part:
|
||||
continue
|
||||
ids.add(int(part))
|
||||
except Exception:
|
||||
continue
|
||||
@@ -196,6 +211,8 @@ def bulk_delete_questions(request):
|
||||
|
||||
deleted = 0
|
||||
errors = []
|
||||
# For debugging: capture what was received
|
||||
received_post = {k: request.POST.getlist(k) for k in request.POST.keys()}
|
||||
try:
|
||||
qs = Model.objects.filter(pk__in=list(ids))
|
||||
deleted = qs.count()
|
||||
@@ -204,8 +221,13 @@ def bulk_delete_questions(request):
|
||||
logger.exception("bulk_delete failed for app=%s ids=%s", app, ids)
|
||||
return JsonResponse({"ok": False, "error": str(e)}, status=500)
|
||||
|
||||
# Render a small fragment
|
||||
return render(request, "generic/partials/bulk_delete_result.html", {"deleted": deleted, "errors": errors})
|
||||
# Render a small fragment. Include debug info when nothing was deleted to aid diagnosis.
|
||||
context = {"deleted": deleted, "errors": errors}
|
||||
if deleted == 0:
|
||||
context["debug_post"] = received_post
|
||||
context["debug_ids"] = sorted(list(ids))
|
||||
context["debug_app"] = app
|
||||
return render(request, "generic/partials/bulk_delete_result.html", context)
|
||||
|
||||
|
||||
class RedirectMixin:
|
||||
|
||||
Reference in New Issue
Block a user