To handle file uploads in Django, you can use the FileField
or ImageField
model field. These fields are included in the django.db.models.fields.files
module.
Here's an example of how you can use them in your models:
from django.db import models
class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d')
class Image(models.Model):
image = models.ImageField(upload_to='images/%Y/%m/%d')
The upload_to
parameter specifies the directory where the uploaded files will be stored. You can also specify a callable as the upload_to
parameter, which will be passed the instance
of the model and the filename
of the uploaded file.
In your template, you can use the {% csrf_token %}
template tag to protect against cross-site request forgery attacks and the enctype
attribute of the <form>
element to specify that the form will be used for file uploads:
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Upload">
</form>
To handle the file upload in your view, you can use the request.FILES
attribute. This attribute is a dictionary containing a key for each FileField
or ImageField
in the form. Here's an example of how you can handle the file upload in your view:
from django.shortcuts import render, redirect
def handle_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('document_list')
else:
form = DocumentForm()
return render(request, 'handle_upload.html', {'form': form})
I hope this helps! If you have any problem, you can comment or direct message.