Django delete view
Prerequisites
Django Delete View
- Django delete view used to delete a record from the database through user interaction.
- It identifies the object based on the primary key.
function based delete view
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from my_app.models import Contact
def fbv_delete_view(request, pk):
obj = get_object_or_404(Contact, id=pk)
if request.method.lower() == 'post':
obj.delete()
return HttpResponse('Delete success')
context = {'object': obj}
return render(request, 'delete_template.html', context)
- For
GET
request, it shows info about the deleted object. - Once user confirms the delete with
POST
request then it deletes the object and returns the response.
class based delete view
- Django provides the generic view
DeleteView
to delete object. - Look at the code below.
from django.http import HttpResponse
from django.views.generic.edit import DeleteView
from my_app.models import Contact
class CBVDeleteView(DeleteView):
pk_url_kwarg = 'pk'
queryset = Contact.objects.all()
template_name = 'delete_template.html'
def form_valid(self, form):
self.object = self.get_object()
self.object.delete()
return HttpResponse('Delete success')
- It works same as the function based delete view implemented above.
pk_url_kwarg
- to identify the object or the record - Attributes
queryset
or model
or method get_object()
is required to get the object.
- open
my_app/urls.py
and add below code to it.
from django.urls import path
from my_app import views
urlpatterns = [
# ...
path('fbv_delete_view/<int:pk>', views.fbv_delete_view, name='fbv_delete_view'),
path('cbv_delete_view/<int:pk>', views.CBVDeleteView.as_view(), name='cbv_delete_view'),
# ...
]
References