Setting up an upload form within a django model
It often happens that you wish to add a file field to a registration or data insertion form ... So far we have not yet dealt with this type of field. The file field type can be treated either in isolation or within a model. To keep it simple, we are going to deal with this last type.
MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
MEDIA_URL = '/ media /'Next, let's configure the url.py files of the studentsApp application:
urls.py
from django.contrib import admin
from django.urls import path
from uploadFile import views
urlpatterns = [
    path ('admin /', admin.site.urls),
    path ('students /', views.index),
]Consider the Students model example that we have already covered in the django models tutorial, to which we add a file field that allows students to attach their photos during registration: models.py
from django.db import models
class Students (models.Model):
    name = models.CharField (max_length = 25)
    email = models.EmailField (max_length = 40)
    phone = models.IntegerField (max_length = 40)
    section = models.CharField (max_length = 25)
    photo = models.FileField (upload_to = 'photos')The upload_to = 'photos' argument we added tells django that the uploaded files should be saved in a folder named media / photos. Do you have to manually create this directory? Well don't worry! Django will create it automatically when running the script.
python manage.py makemigrations studentsAppand after that :
python manage.py migrateWe then create a forms.py file that will generate the form:
forms.py
from django.forms import ModelForm
from studentsApp.models import Students
class StudentsForm (ModelForm):
    class Meta:
        model = Students
        fields = ['name', 'email', 'phone', 'section', 'photo']The views: will then be created in the same way as in the previous tutorial concerning django models with the difference of adding a request.FILES parameter views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import StudentsForm
def index (request):
    if request.method == 'POST':
        form = StudentsForm (request.POST, request.FILES)
        if form.is_valid ():
            form.save ()
            return HttpResponseRedirect ('/ students /')
    else:
        form = StudentsForm ()
    return render (request, 'index.html', {'form': form})Finally, we just have to create the index.html template file: template/index.html
<! DOCTYPE html>
<html lang = "in">
<head>
    <meta charset = "UTF-8">
    <title> Title </title>
</head>
<body>
<form enctype = "multipart / form-data" method = "post">
{% csrf_token%}
{{form.as_p}}
<button type = "submit" class = "save btn btn − default"> Save </button>
</form>
</body>Without forgetting the parameter enctype = "multipart / form-data"
my-courses.net

