Django File Upload and save data to database sqlite3
Django provides built-in library and methods that help to upload a file to the server.
The forms.FileField() method is used to create a file input and submit the file to the server. While working with files, make sure the HTML form tag contains enctype="multipart/form-data" property.
#models.py from django.db import models # Create your models here. class StudentForm(models.Model): firstname = models.CharField("Enter first name", max_length=50) lastname = models.CharField("Enter last name", max_length = 50) email = models.EmailField("Enter Email") file = models.FileField() # for creating file input class Meta: db_table = "student"
#forms.py from django import forms from myapp.models import StudentForm #models.py class StudentForm(forms.ModelForm): class Meta: model = StudentForm fields = "__all__"
#view.py from django.shortcuts import render from django.http import HttpResponse from myapp.functions import handle_uploaded_file #functions.py from myapp.forms import StudentForm #forms.py def index(request): if request.method == 'POST': student = StudentForm(request.POST, request.FILES) if student.is_valid(): handle_uploaded_file(request.FILES['file']) model_instance = student.save(commit=False) model_instance.save() return HttpResponse("File uploaded successfuly") else: student = StudentForm() return render(request,"index.html",{'form':student})
//templates/index.html <html> <head> <title>Django File Upload</title> </head> <body> <p><h1>Django File Upload</h1></p> <form method="POST" class="post-form" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit" class="save btn btn-default">Save</button> </form> </body> </html>
#urls.py from django.contrib import admin from django.urls import path from myapp import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), ]
#functions.py def handle_uploaded_file(f): with open('myapp/static/upload/'+f.name, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk)