Skip to content

Instantly share code, notes, and snippets.

@Shrestha7
Created November 13, 2020 08:18
Show Gist options
  • Save Shrestha7/6608b9aa18474ab5ad396c37fa99955a to your computer and use it in GitHub Desktop.
Save Shrestha7/6608b9aa18474ab5ad396c37fa99955a to your computer and use it in GitHub Desktop.
Django crud with ajax delete part 4
{% load crispy_forms_tags %}
<form method="post" data-url="{% url 'book_delete' book.id %}" class="delete-form">
{% csrf_token %}
<div class="modal-header">
<h5 class="modal-title" >Delete Book</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p class="lead"> Are you sure you want to delete this book <strong>{{book.title}}</strong></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-danger">Delete book</button>
</div>
</form>
{% for book in books %}
<tr>
<td>{{ book.id }}</td>
<td>{{ book.title }}</td>
<td>{{ book.author }}</td>
<td>{{ book.book_type }}</td>
<td>{{ book.publication_date }}</td>
<td>{{ book.pages }}</td>
<td>{{ book.price }}</td>
<td>
<button class="btn btn-warning show-form-update" data-url="{% url 'book_update' book.id %}">
<span class="glyphicon glyphicon-pencil"></span>
Edit
</button>
</td>
<td>
<button class="btn btn-danger show-form-delete" data-url="{% url 'book_delete' book.id %}">
<span class="glyphicon glyphicon-trash"></span>
Delete
</button>
</td>
</tr>
{% empty %}
<tr>
<td colspan="7" class="text-center bg-warning">No book</td>
</tr>
{% endfor %}
$(document).ready(function(){
var ShowForm = function(){
var btn = $(this);
$.ajax({
url: btn.attr("data-url"),
type: 'get',
dataType:'json',
beforeSend: function(){
$('#modal-book').modal('show');
},
success: function(data){
$('#modal-book .modal-content').html(data.html_form);
}
});
};
var SaveForm = function(){
var form = $(this);
$.ajax({
url: form.attr('data-url'),
data: form.serialize(),
type: form.attr('method'),
dataType: 'json',
success: function(data){
if(data.form_is_valid){
$('#book-table tbody').html(data.book_list);
$('#modal-book').modal('hide');
} else {
$('#modal-book .modal-content').html(data.html_form)
}
}
})
return false;
}
// create
$(".show-form").click(ShowForm);
$("#modal-book").on("submit",".create-form",SaveForm);
//update
$('#book-table').on("click",".show-form-update",ShowForm);
$('#modal-book').on("submit",".update-form",SaveForm)
//delete
$('#book-table').on("click",".show-form-delete",ShowForm);
$('#modal-book').on("submit",".delete-form",SaveForm)
});
from django.conf.urls import url, include
from . import views
urlpatterns = [
url(r'^books/$', views.book_list, name='book_list'),
url(r'^books/create$', views.book_create, name='book_create'),
url(r'^books/(?P<id>\d+)/update$', views.book_update, name='book_update'),
url(r'^books/(?P<id>\d+)/delete$', views.book_delete, name='book_delete'),
]
from django.shortcuts import render,get_object_or_404
from .models import Book
from .forms import BookForm
from django.http import JsonResponse
from django.template.loader import render_to_string
def book_list(request):
books = Book.objects.all()
context = {
'books': books
}
return render(request, 'book_list.html',context)
def save_all(request,form,template_name):
data = dict()
if request.method == 'POST':
if form.is_valid():
form.save()
data['form_is_valid'] = True
books = Book.objects.all()
data['book_list'] = render_to_string('book_list_2.html',{'books':books})
else:
data['form_is_valid'] = False
context = {
'form':form
}
data['html_form'] = render_to_string(template_name,context,request=request)
return JsonResponse(data)
def book_create(request):
if request.method == 'POST':
form = BookForm(request.POST)
else:
form = BookForm()
return save_all(request,form,'book_create.html')
def book_update(request,id):
book = get_object_or_404(Book,id=id)
if request.method == 'POST':
form = BookForm(request.POST,instance=book)
else:
form = BookForm(instance=book)
return save_all(request,form,'book_update.html')
def book_delete(request,id):
data = dict()
book = get_object_or_404(Book,id=id)
if request.method == "POST":
book.delete()
data['form_is_valid'] = True
books = Book.objects.all()
data['book_list'] = render_to_string('book_list_2.html',{'books':books})
else:
context = {'book':book}
data['html_form'] = render_to_string('book_delete.html',context,request=request)
return JsonResponse(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment