Skip to main content

How to upload a csv file in django?

csv file:--> It stands for comma separated value files.It is in the form of the tabular format and we can open it in Microsoft Excel.

Now see how we can upload it in the django..first we create a project in django.to create a project the commands are as follows:

         django-admin startproject csv
    $ cd csv
    $ python manage.py startapp csvfile

Once we have created an app we have to add this app in the INSTALLED_APPS  in settings.py.

In the models.py we have to created two class one is Bank and other is Branch.

from django.db import models


class Bank(models.Model):
    name = models.CharField(max_length=50)

    class Meta:
        ordering = ('name',)

    def __str__(self):
        return "{}".format(self.name)

class Branch(models.Model):
    name = models.CharField(max_length=256)  # branch 
    ifsc = models.CharField(max_length=500, unique=True)
    bank = models.ForeignKey(Bank)
    address = models.TextField()
    city = models.CharField(max_length=500)
    district = models.CharField(max_length=500)
    state = models.CharField(max_length=500)

    class Meta:
        ordering = ('name',)
        verbose_name = 'Branch'
        verbose_name_plural = 'Branch'
    
    def __str__(self):
        return "{} - {} - {}".format(self.name, self.city, self.bank)
After creating these classed we have to migrate the model so that it can make a table in the database..
python manage.py makemigrations 
from this command there is file created in out migrations folder in our django projects which means that the migrations is save in our django project but till now do not create a table in our database..For that the command is 
python manage.py migrate    Now our migration is completed 


Register our model in the admin.py file:

from django.contrib import admin# Register your models here.
from .models import Bank,Branch
admin.site.register((Bank,Branch))

In the views the code is :


import csv
from rest_framework.response import Response
from django.contrib import messages
from django.shortcuts import render
from django.views import View
from .models import Bank, Branch

class ImportView(View):
    def get(self, request):
        return render(request, 'csv_fileupload.html')

    def post(self, request):
        csv_file = request.FILES.get('csv_file')
        decoded_file = csv_file.read().decode('utf-8').splitlines()
        reader = csv.DictReader(decoded_file)
        count = 0
        # ifsc_list = list(Branch.objects.values_list('ifsc', flat=True))
        for row in reader:
            bank_name = row.get('bank_name')
            ifsc = row.get('ifsc')
            branch = row.get('branch')
            address = row.get('address')
            city = row.get('city')
            district = row.get('district')
            state = row.get('state')
            print("IFSC-- {}".format(ifsc))
            if not ifsc:
                break
            bank_object, created = Bank.objects.get_or_create(
                name=bank_name
            )
            branch_defaults = {
                'name': branch,
                'bank': bank_object,
                'address': address,
                'city': city,
                'district': district,
                'state': state    
            }
        
            branch_object, created = Branch.objects.update_or_create(
                ifsc=ifsc, defaults=branch_defaults
            )
            if created:
                print("row created{}".format(branch_defaults))

            # print("No of Rows imported - {} - {} ".format(count, branch_defaults))
            
            count += 1
        messages.success(request, "{} rows imported.".format(count))
            
        return render(request, 'csv_fileupload.html')


Create a templates folder in the root directory and a new HTML file named csv_fileupload.html

TEMPLATE_DIR = os.path.join(BASE_DIR, "templates")
# Add the TEMPLATE_DIR in the TEMPLATES:
'DIRS': [TEMPLATE_DIR, ],

In the csv_fileupload.html we write this code..
<html>
    <head>
        <title>IFSC data import</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" 
        integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" 
        integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
    </head>
    <body>
    <style>
        .import_form{
            padding: 10px 10px;
            border-radius: 2px;
            border: solid 2px #e5eff7;
        }
    </style>
        <div class="import_form col-md-12">
            <form action="" method="POST" enctype="multipart/form-data" 
class="form-horizontal"> 
                <fieldset>
                    <legend>Import IFSC Data</legend> 
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="name" class="col-md-3 col-sm-3 col-xs-12 
                            control-label">File: </label>
                        <div class="col-md-8">
                            <input type="file" name="csv_file" id="csv_file" 
                            required="True" class="form-control">
                        </div>                    
                    </div>
                    <div class="form-group">                    
                        <div class="col-md-3 col-sm-3 col-xs-12 col-md-offset-3" 
                        style="margin-bottom:10px;">
                            <button class="btn btn-primary"> <span 
class="glyphicon glyphicon-upload" style="margin-right:5px;"></span>Upload</button>
                        </div> 
                    </div>
                </fieldset>
            </form>
            {% if messages %}
                <ul>
                    {% for message in messages %}
                        <li style="list-style-type: none ;">
                            {{ message }}
                        </div>
                        </li>
                    {% endfor %}
                </ul>
            {% endif %}
        </div>
        
    </body>
</html>


Add the path in the file/urls.py which is the main URL file:

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from .views import ImportView

urlpatterns = [
path('admin/', admin.site.urls),
path('upload-csv/',ImportView.as_view(), name='import'"),
]

Now, create a new test.csv file and try to upload it:

test.csv file

name,ifsc,bank,address,city,district,state
RANCHI HATIA MA,ALLA0212214,ALLAHABAD BANK,HATIA MARKET ANEILLIARY CHOWK TUPUNDANA DIST-RANCHI JHARKHAND834003,RANCHI,RANCHI,JHARKHAND







































Comments

Popular posts from this blog

Django (web framework) Programming and Development

Introduction: Django is a Python-based free and open-source web system, which takes after the model-view-template (MVT) building design. It is kept up by the Django Computer program Establishment (DSF), an autonomous organization built up as a non-profit. Django's essential objective is to ease the creation of complex, database-driven websites. The system emphasizes reusability and "pluggability" of components, less code, coupling, quick advancement, and the guideline of do not rehash yourself. Python is utilized all through, indeed for settings records and information models. Django too gives an discretionary administrative create, examined, upgrade and erase interface that's produced powerfully through contemplation and designed through admin models. A few well-known destinations that utilize Django incorporate the Open Broadcasting Benefit, Instagram, Mozilla, The Washington Times, Disqus, Bitbucket, and Nextdoor. It was utilized on Pinterest, but afterward the loc...

How to create user-register form,login,logout and also make a profile of each user register in Django?

Django provides a quite easy way to create a User-Registration as all are already presents in the Django we just know how to use this..Here, we will see how to easily implement this and create a profile of all users which are register.This article will be an interesting and important so please read out seriously. firstly we have to start a project and than start an app:     django-admin startproject user-authentication     $ cd user-authentication     $ python manage.py startapp users Once we have created an app we have to add this app in the INSTALLED_APPS  in settings.py. Than we have to add the path of the accounts app: "main project urls.py" from  django.contrib  import  admin from  django.urls  import  path,include from  django.conf  import  settings from  django.conf.urls.static  import  static from  users  import  views  as  user_views from  ...