Удаление объекта в django по двум параметрам с помощью ajax.Объект удаляется во время объявления .Как сохранить объект для использования в шаблонах?

Когда я пытаюсь удалить объект с помощью ajax вызова, оба ID не передаются в url

Получаю url типа

 127.0.0:8000/delete//

Объект удаляется во время объявления .Как сохранить объект для использования в шаблонах???

urls.py

path('delete/<int:a_id>/<int:b_id>',views.delete,name="delete")

views.py

def delete(request,a_id,b_id):
  obj=Table.objects.get(a_id=a_id,b_id=b_id)
  obj.delete()
   return render(request,"delete.html",{'obj':obj})

delete.html

<input type="hidden" id="a_id" data-value="{{obj.a_id}}">
<input type="hidden" id="b_id" data-value="{{obj.b_id}}">

script.js

 var a_id=$("#a_id").data("value");
 var b_id=$("#b_id").data("value");
 #some code
 $.ajax({
     url:'delete/'+ a_id +'/' + b_id,
     #some code


 });

Вы пытаетесь удалить по щелчку на кнопке или просто по вызову url? Если вы переходите по url, скажем (127.0.0:8000/delete/23/12), он будет удален, когда вы достигнете этой страницы, потому что .

Чтобы предотвратить это, добавьте условие для удаления в запросе, например, и :

def delete(request,a_id,b_id):
  obj=Table.objects.get(a_id=a_id,b_id=b_id)
  if request.method == "POST": #or DELETE
     obj.delete()
     #return success redirect or some response
     #you can return obj once it's deleted
  return render(request,"delete.html",{'obj':obj})

Затем в вызове ajax вы можете добавить тип запроса

$.ajax({
  url:your_url,
  type:"POST",
  data:pass_csrf_token 
})

Но я бы рекомендовал сделать отдельное представление для удаления этого. И передавать id в данных ajax секции как

$.ajax({
  url:your_url,
  type:"POST",
  data:{
    csrf:token,
    a_id:a_id,
    b_id:b_id 
  } 
})

Тогда Вид будет

#seperate view to delete obj
def delete_obj(request):
  a_id=request.POST.get("a_id") #what you passed in ajax data section
  b_id=request.POST.get("b_id")
  obj=Table.objects.get(a_id=a_id,b_id=b_id)
  if request.method == "POST": #or DELETE
     obj.delete()

  return JsonResponse("deleted":True) #any response you want
Вернуться на верх