Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Delete CBV with confirmation pop-up and multiple success url

In my case, an instance Model can be delete from:

  • a ListView inherited View
  • a DetailView inherited View

By default, when a delete view is called:

  • the get function calls 'confirm_delete' template. Instead I want a pop-up/modal to appear, and if delete is clicked in the modal will delete the object
  • if the delete operation is on a ListView, after delete the user will remain on ListView and the ListView content will be updated

  • if the delete operation is on a DetailView, after delete the user will be redirected to the ListView or another page(depending on other rules)

--

So I want to know how to do Ajax calls on delete, how to have conditional success urls in delete, based of where I am before the action.

like image 449
user3541631 Avatar asked Dec 05 '25 04:12

user3541631


1 Answers

For the DetailView you can simply use a form as follows:

<form action="{% url "app:delete" object.id %}" method="post">
  {% csrf_token %}

  <button onclick="return confirm('Are you sure?');">Delete</button>
</form>

Clicking on the button will open a confirm dialog. If the users clicks OK the form will be submitted. This will delete the object and redirect to the same way the confirm_delete page would have redirected.

For the ListView can simply send a POST request to the DeleteView and on success reload the current page to update the ListView. How you send your AJAX request depends on whether you use any libraries, but with jQuery it could be done as follows:

$.ajax('{% url "app:delete" object.id %}', {
    method: 'POST',
    success: function() {
        window.location.reload();
    },
});

Note: don't forget to include the csrf_token for the AJAX request to work. See the docs for more information.

like image 161
ikkuh Avatar answered Dec 07 '25 20:12

ikkuh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!