article

Wednesday, May 18, 2022

Django Mysql CRUD (Create Read Update Delete) with Datatables

Django Mysql CRUD (Create Read Update Delete) with Datatables

Register App myapp and
Connect to MySQL Database

devproject/settings.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//devproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp', #add myapp
]
       
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}
Create Model
myapp/models.py
1
2
3
4
5
6
7
8
9
10
11
//myapp/models.py
from django.db import models
 
# Create your models here.
class Employee(models.Model): 
    name = models.CharField(max_length=100
    email = models.EmailField() 
    contact = models.CharField(max_length=15)
   
    class Meta: 
        db_table = "tblemployee"
Make Migrations
Run the commands below to make migrations:
python manage.py makemigrations
python manage.py migrate
C:\django\devproject>python manage.py makemigrations
C:\django\devproject>python manage.py migrate

Create Forms
myapp/forms.py
1
2
3
4
5
6
7
8
9
10
11
//myapp/forms.py
from django import forms 
from myapp.models import Employee 
class EmployeeForm(forms.ModelForm): 
    class Meta: 
        model = Employee 
        fields = ['name', 'contact', 'email']
        widgets = { 'name': forms.TextInput(attrs={ 'class': 'form-control' }),
            'email': forms.EmailInput(attrs={ 'class': 'form-control' }),
            'contact': forms.TextInput(attrs={ 'class': 'form-control' }),
      }
Creating View
myapp/views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//myapp/views.py
from django.shortcuts import render, redirect 
from myapp.forms import EmployeeForm 
from myapp.models import Employee 
 
# Create your views here. 
def addnew(request): 
    if request.method == "POST"
        form = EmployeeForm(request.POST) 
        if form.is_valid(): 
            try
                form.save() 
                return redirect('/'
            except
                pass
    else
        form = EmployeeForm() 
    return render(request,'index.html',{'form':form}) 
 
def index(request): 
    employees = Employee.objects.all() 
    return render(request,"show.html",{'employees':employees}) 
 
def edit(request, id): 
    employee = Employee.objects.get(id=id
    return render(request,'edit.html', {'employee':employee}) 
 
def update(request, id): 
    employee = Employee.objects.get(id=id
    form = EmployeeForm(request.POST, instance = employee) 
    if form.is_valid(): 
        form.save() 
        return redirect("/"
    return render(request, 'edit.html', {'employee': employee}) 
     
def destroy(request, id): 
    employee = Employee.objects.get(id=id
    employee.delete() 
    return redirect("/"
Template

myapp/templates/index.html

Bootstrap 5
https://getbootstrap.com/docs/5.0/getting-started/introduction/
https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css

Jquery
https://jquery.com/download/
CDN : jsDelivr CDN
https://www.jsdelivr.com/package/npm/jquery
https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js

https://datatables.net/
DataTables is a powerful jQuery plugin for creating table listings and adding interactions to them. It provides searching, sorting and pagination without any configuration.

myapp/templates/base.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//myapp/templates/base.html
<!DOCTYPE html> 
<html lang="en"
<head> 
<meta charset="UTF-8"
<title>{% block title %}{% endblock %}</title>
{% load static %} 
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"/>
<link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/1.12.0/css/jquery.dataTables.min.css"/>
<meta charset="UTF-8" name="viewport" content="width=device-width, initial-scale=1"/>
</head>
<body>
<div class="container">
 <div class="row">
    <h4>Django Mysql CRUD (Create Read Update Delete) with Datatables</h4>
    {% block content %}{% endblock %}
 </div>
</div>
 
<script>
$(document).ready(function() {
    $('#bootstrapdatatable').DataTable({    
      "aLengthMenu": [[3, 5, 10, 25, -1], [3, 5, 10, 25, "All"]],
        "iDisplayLength": 3
       }
    );
} );
</script>
</body>
</html>
myapp/templates/show.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//myapp/templates/show.html
{% extends "base.html" %}
  
{% block title %}Employee Records{% endblock title %}
  
{% block content %}
 <div class="col-md-12">
        <span><a href="/addnew" class="btn btn-primary">Add New Record</a></span> 
        <div class="table-responsive">
        <table id="bootstrapdatatable" class="table table-striped table-bordered" width="100%">
        <thead>
            <th><input type="checkbox" id="checkall" /></th>
            <th>ID</th>
            <th>Employee Name</th>
            <th>Employee Email</th>
            <th>Employee Contact</th>
            <th>Edit</th>
            <th>Delete</th>
        </thead>
        <tbody>
        {% for employee in employees %} 
            <tr> 
            <td><input type="checkbox" class="checkthis" /></td>
            <td>{{ employee.id }}</td> 
            <td>{{ employee.name }}</td> 
            <td>{{ employee.email }}</td> 
            <td>{{ employee.contact }}</td> 
            <td><a href="/edit/{{ employee.id }}" class="btn btn-primary">Edit</a></td>
            <td><a href="/delete/{{ employee.id }}" class="btn btn-danger">Delete</a></td> 
            </tr> 
        {% endfor %}
        </tbody>
        </table>
        </div>
    </div>
{% endblock content %}
myapp/templates/index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//myapp/templates/index.html
{% extends "base.html" %}
  
{% block title %}Add New Employee Records{% endblock title %}
  
{% block content %}
<div class="col-md-12">   
    <form method="POST" class="post-form" action="/addnew"
    {% csrf_token %} 
    <div class="container"
        <div class="col-12"
        <h3>Enter Details</h3> 
        </div>   
     
        <div class="mb-3">
            <label>Name:</label> 
            {{ form.name }}  
        </div>
        <div class="mb-3">
            <label>Email:</label> 
            {{ form.email }}  
        </div> 
        <div class="mb-3">
            <label>Contact:</label> 
            {{ form.contact }}  
        </div>
        <div class="mb-3">
            <button type="submit" class="btn btn-primary">Submit</button>   
        </div>
    </div> 
    </form> 
</div>
{% endblock content %}
myapp/templates/edit.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//myapp/templates/edit.html
{% extends "base.html" %}
  
{% block title %}Add New Employee Records{% endblock title %}
  
{% block content %}
<div class="col-md-12">
    <form method="POST" class="post-form" action="/update/{{employee.id}}"
    {% csrf_token %} 
    <div class="container">  
        <div class="col-12"
            <h3>Update Details</h3> 
        </div>
        <div class="mb-3">
            <label>Employee ID:</label> 
            <input type="text" class="form-control" name="id" id="id_id" required maxlength="20" value="{{ employee.id }}"/>   
        </div>
        <div class="mb-3">
            <label>Name:</label> 
            <input type="text" class="form-control" name="name" id="id_name" required maxlength="100" value="{{ employee.name }}" /> 
        </div>
        <div class="mb-3">
            <label>Email:</label> 
            <input type="email" class="form-control" name="email" id="id_email" required maxlength="254" value="{{ employee.email }}" /> 
        </div>
        <div class="mb-3">
            <label>Contact:</label> 
            <input type="text" class="form-control" name="contact" id="id_contact" required maxlength="15" value="{{ employee.contact }}" /> 
        </div>
        <div class="mb-3">
            <button type="submit" class="btn btn-success btn-lg">Update</button> 
        </div>
    </div> 
    </form> 
{% endblock content %}  
URL
devproject/urls.py

1
2
3
4
5
6
7
8
9
10
11
12
13
//devproject/urls.py
from django.contrib import admin
from django.urls import path
from myapp import views 
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'), 
    path('addnew',views.addnew, name='addnew'), 
    path('edit/<int:id>', views.edit, name='edit'), 
    path('update/<int:id>', views.update, name='update'), 
    path('delete/<int:id>', views.destroy, name='destroy'), 
]
Run : C:\django\devproject>python manage.py runserver

Related Post