Execute the CRUD Operation in Django with SQLite Database

In this tutorial, we will learn how to do CRUD Operations using Django with SQLite Database. In this tutorial, we will Create, Retrieve, Update, and delete records from a database table. So, we will see a step-by-step procedure to do this.

After Creating the Django App let’s create a model that contains table name and fields

http://labpys.com/how-to-create-login-page-using-django-python/

models.py

from django.db import models
from Django import forms 

class tbl_Companydetails(models.Model):
  #  Id = models.IntegerField() 
    companyName =  models.CharField(max_length = 150)
    Address = models.CharField(max_length = 500)
    contactNo = models.CharField(max_length=15)
    establisheddate = models.DateField(null=True, blank=True)
    websitelink = models.CharField(max_length=50,default='')
    emailaddress = models.CharField(max_length=50,default='')   
  #  companylogo =models.FileField()

    def __str__(self):
        return self.companyName
    ddlcompanyobjects = models. Manager()

After creating model then create forms.py file

from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Submit, Row, Column, Field

from .models import tbl_Companydetails

class Companymaster(forms.ModelForm):
    class Meta:
        model = tbl_Companydetails
        fields=['companyName','Address','contactNo','establisheddate','websitelink','emailaddress']

creating model execute commands  

python manage.py makemigrations

python manage.py migrate

Then create a method to retrieve and insert data in a database table using view.

Views.py

from django.shortcuts import render,redirect
from django.contrib.auth import login,authenticate
from .models import tbl_Authentication,tbl_Companydetails
from .forms import Companymaster
from django.shortcuts import render, redirect ,get_object_or_404 
from django.contrib import messages 

def CreatecompanyNew(request):
    ddlcompanyobjects= tbl_Companydetails.ddlcompanyobjects.all()

    if request.method == 'POST':
        form = Companymaster(request.POST)
        print(form.errors,form)
        if form.is_valid(): 
            user = form.save(commit=False)                
            user.save()                
            return render(request,'company.html',{'form':form,'ddlcompanyobjects':ddlcompanyobjects})
    else:
        form = Companymaster()
    return render(request,'company.html',{'form':form,'ddlcompanyobjects':ddlcompanyobjects})

edits existing records

def Editcompany(request, id):      
    ddlcompanyobjects = tbl_Companydetails.ddlcompanyobjects.get(id=id)      
    return render(request,'EditCompany.html', {'ddlcompanyobjects':ddlcompanyobjects})  

 
def Updatecompany(request, id):
        print('t')          
        obj= get_object_or_404(tbl_Companydetails, id=id)       
        form = Companymaster(request.POST, instance= obj)
        context= {'form': form}
        print(obj)
        if form.is_valid():
            ddlcompanyobjects = tbl_Companydetails.ddlcompanyobjects.all()               
            user = form.save(commit=False)      
            user.save()       
            messages.success(request, "You successfully updated the Data")
            context= {'form': form}                           
            return render(request, 'company.html',{'form':form,'ddlcompanyobjects':ddlcompanyobjects})
        else:
            context= {'form': form,
                           'error': 'The Data  was not updated successfully.'}
            return render(request,'company.html' , context)

Delete a record in the table

def Deletecompany(request, id): 
    ddlcompanyobjects = tbl_Companydetails.ddlcompanyobjects.get(id=id)       
    ddlcompanyobjects.delete()
    return redirect('/CreatecompanyNew')

After that  add the path to urls.py files

from django.urls import path
from . import views

urlpatterns = [
    path("",views.base,name="base"),
 

    path('CreatecompanyNew/',views.CreatecompanyNew,name='CreatecompanyNew'),
    path('Editcompany/<int:id>', views.Editcompany,name="Editcompany"),
    path('Updatecompany/<int:id>', views.Updatecompany,name="Updatecompany"), 
    path('Deletecompany/<int:id>', views.Deletecompany,name="Deletecompany"), 
    
]

Once writing views and models is over then move to the templates folder to create html page named Company.html, here I am using Django with boostrap4.

{%  block title %} Company {%  endblock %} 
 
{% block content %} 

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<form method="POST"  enctype = "multipart/form-data" >
{% csrf_token %}
<div class="container shadow-lg">
<div class="row">
        <div class="col-md-12 col-xs-12">
          <div class="x_panel">
            <div class="x_title">
              <h2>Company Details</h2>
           
              <div class="clearfix"></div>
            </div> 
            <div class="row">
                  <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-6 col-sm-3 col-xs-12" for="name">Company Name <span class="required">*</span>
                    </label>
                    <input type="text" name="companyName" class="form-control" pattern="^[^\s][\w\W]*$" autocomplete="off"
                    title="Enter Company Name. Dont Use Space At Start and Special Characters, You can use a combination of Alphabets and Numbers."
                    minlength="1" maxlength="50" onkeypress="return (event.charCode > 64 && event.charCode < 91) || (event.charCode > 96 && event.charCode < 123) || (event.charCode == 32)"/> 
                   </div>

                   <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Address<span class="required">*</span>
                    </label>
                    <input type="text" name="Address" class="form-control" /> 
                   </div>      
            </div>          
            <div class="row">
                   <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Contact No<span class="required">*</span>
                    </label>
                    <input type="text" name="contactNo" class="form-control" pattern="[0-9]{10}"
                               autocomplete="off"
                               title="Enter Contact Number."
                               minlength="10" maxlength="10"
                        onkeypress="return (event.charCode >= 48 && event.charCode <= 57)"/> 
                   </div>

                   <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-4 col-sm-3 col-xs-12" for="name">Established date<span class="required">*</span>
                    </label>
                    <input type="date" name="establisheddate" class="form-control" /> 
                   </div>
                            
            </div>

            <div class="row">
              <div class="form-group col-md-6 mb-0">
               <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Website URL<span class="required">*</span>
               </label>
               <input type="text" name="websitelink" class="form-control" /> 
              </div>

              <div class="form-group col-md-6 mb-0">
               <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Email address<span class="required">*</span>
               </label>
               <input type="text" name="emailaddress" class="form-control" /> 
              </div>
                       
       </div>

       <div class="row"> 
       </div>
       <br/>
            <div class="form-group">
              <div class="col-md-9 col-sm-9 col-xs-12 col-md-offset-3">
                <button type="submit" class="btn btn-success">Submit</button>
               <button class="btn btn-primary" type="reset">Reset</button>               
              </div>
            </div>
          </div>

          <div class="x_content">
            <div id="datatable_wrapper" class="dataTables_wrapper form-inline dt-bootstrap no-footer">
              <div class="row">
                <div class="col-sm-12">
                  <table id="datatable" class="table table-striped table-bordered dataTable no-footer"
                    role="grid" aria-describedby="datatable_info">            

        <thead>
            <tr role="row">
              <th hidden="true">SLNO</th>
              <th>Company Name</th>
              <th>Address</th>
              <th>Contact No</th>
              <th>Established Date</th>
              <th>Email</th>
              <th>Website Url</th>
              <th>Action</th>              
            </tr>
          </thead>
      
      <tbody>
        {% for company in ddlcompanyobjects %}
          <tr style="background:#f8fcff">
            <td class="align-middle" hidden="true">{{ company.id   }}</td>
            <td class="align-middle" >{{ company.companyName   }}</td>
            <td class="align-middle">{{ company.Address  }}</td> 
            <td class="align-middle">{{ company.contactNo  }}</td> 
            <td class="align-middle">{{ company.establisheddate  }}</td> 
            <td class="align-middle">{{ company.emailaddress   }}</td> 
            <td class="align-middle">{{company.websitelink}} </td>
            <td>
                <a  href="/Editcompany/{{ company.id }}"><i class="fa fa-pencil"></i>Edit</a>
                 <a href="/Deletecompany/{{ company.id }}"><i class="fa fa-trash-o"></i>Delete</a> 
              </td>
       
          </tr>

        {% empty %}
          <tr>
            <td class="bg-light text-center font-italic" colspan="4">No Data</td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
          </div>
        </div>
            </div>
          </div>
        </div>
</div> 
</div>
</form>
{% endblock %}

Editcompany.html

{%  block title %} Company {%  endblock %}

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> 

{% block content %}
 
 
<form method="POST"  action="/Updatecompany/{{ ddlcompanyobjects.id }}" enctype = "multipart/form-data" >
{% csrf_token %}
<div class="container shadow-lg">
<div class="row">
        <div class="col-md-12 col-xs-12">
          <div class="x_panel">
            <div class="x_title">
              <h2>Company Details</h2>
           
              <div class="clearfix"></div>
            </div> 
            <div class="row">
                  <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-6 col-sm-3 col-xs-12" for="name">Company Name <span class="required">*</span>
                    </label>
                    <input type="text" name="companyName" class="form-control" value="{{ ddlcompanyobjects.companyName }}" 
                    pattern="^[^\s][\w\W]*$" autocomplete="off"
                    title="Enter Company Name. Dont Use Space At Start and Special Characters, You can use a combination of Alphabets and Numbers."
                    minlength="1" maxlength="50" onkeypress="return (event.charCode > 64 && event.charCode < 91) || (event.charCode > 96 && event.charCode < 123) || (event.charCode == 32)"/> 
                   </div>

                   <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Address<span class="required">*</span>
                    </label>
                    <input type="text" name="Address" class="form-control" value="{{ ddlcompanyobjects.Address }}"/> 
                   </div>     
            </div>           
                   <div class="row">
                   <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Contact No<span class="required">*</span>
                    </label>
                    <input type="text" name="contactNo" class="form-control" value="{{ ddlcompanyobjects.contactNo }}"
                    pattern="[0-9]{10}"
                               autocomplete="off"
                               title="Enter Contact Number."
                               minlength="10" maxlength="10"
                        onkeypress="return (event.charCode >= 48 && event.charCode <= 57)"/> 
                   </div>

                   <div class="form-group col-md-6 mb-0">
                    <label class="control-label col-md-4 col-sm-3 col-xs-12" for="name">Established date<span class="required">*</span>
                    </label>
                    <input type="date" name="establisheddate" class="form-control" value="{{ ddlcompanyobjects.establisheddate|date:"Y-m-d"}}" /> 
                   </div>
                            
            </div>

            <div class="row">
              <div class="form-group col-md-6 mb-0">
               <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Website URL<span class="required">*</span>
               </label>
               <input type="text" name="websitelink" class="form-control" value="{{ ddlcompanyobjects.websitelink }}" /> 
              </div>

              <div class="form-group col-md-6 mb-0">
               <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Email address<span class="required">*</span>
               </label>
               <input type="text" name="emailaddress" class="form-control" value="{{ ddlcompanyobjects.emailaddress }}"/> 
              </div>
                       

       </div>
       <div class="row">

       
       </div>
        <br/>
            
            <div class="form-group">
              <div class="col-md-9 col-sm-9 col-xs-12 col-md-offset-3">
                <button type="submit" class="btn btn-success">Submit</button>
               <button class="btn btn-primary" type="reset">Reset</button>               
              </div>
            </div>
          </div>
        
        </div>
</div>
</div>
 
</form>
{% endblock %}

then execute command

python manage.py runserver



Leave a Reply

Your email address will not be published. Required fields are marked *