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' } } |
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" |
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' }), } |
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( "/" ) |
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 src= "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" ></script> <script> $(document).ready( function () { $( '#bootstrapdatatable' ).DataTable({ "aLengthMenu" : [[3, 5, 10, 25, -1], [3, 5, 10, 25, "All" ]], "iDisplayLength" : 3 } ); } ); </script> </body> </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 %} |
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 %} |
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 %} |
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' ), ] |