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
$ 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,Branchadmin.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
Post a Comment