Skip to content

Instantly share code, notes, and snippets.

@dntandan
Last active February 3, 2020 05:10
Show Gist options
  • Save dntandan/6f92c743328a7d1602f78a786cd21a24 to your computer and use it in GitHub Desktop.
Save dntandan/6f92c743328a7d1602f78a786cd21a24 to your computer and use it in GitHub Desktop.
How to upload multiple images or files to database through django model form submission.
-------------------- models.py --------------------
class categories(models.Model):
cat_name = models.CharField(max_length=50)
cat_slug = models.SlugField(blank=True, editable=True)
cat_banner_image = models.ImageField(upload_to=cat_banner_image_upload,)
def __str__(self):
return self.cat_name
class eventName(models.Model):
event_cat_name = models.ForeignKey(categories, on_delete=models.PROTECT)
event_name = models.CharField(max_length=90)
event_slug = models.SlugField(blank=True, editable=True)
event_banner_image = models.ImageField(upload_to=event_banner_image_upload,)
def __str__(self):
return self.event_name
class eventImage(models.Model):
event_cat_name = models.ForeignKey(categories, on_delete=models.PROTECT)
event_name = models.ForeignKey(eventName, on_delete=models.PROTECT)
event_all_images = models.FileField(upload_to=event_all_image_upload)
-------------------- forms.py --------------------
from django import forms
from .models import *
class ImageUploadForm(forms.ModelForm):
event_all_images = forms.ImageField(
widget=forms.ClearableFileInput(attrs={"multiple": True}), required=True
)
class Meta:
model = eventImage
fields = ["event_cat_name", "event_name", "event_all_images"]
-------------------- urls.py --------------------
from django.urls import path, include
from django.views.generic import TemplateView
from .views import *
urlpatterns = [
path(
"portfolio/multi_images_upload_page", views.upload_image_view.as_view(),
name="image_upload",
),
path("portfolio/success", success, name="success"),
]
-------------------- views.py --------------------
def success(request):
return HttpResponse("successfully uploaded")
class upload_image_view(FormView):
form_class = ImageUploadForm
template_name = "portfolio/upload.html" # Replace with your template.
success_url = "success" # Replace with your URL or reverse().
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist("event_all_images")
if form.is_valid():
event_cat_name = form.cleaned_data["event_cat_name"]
event_name = form.cleaned_data["event_name"]
for f in files:
img = eventImage(
event_all_images=f,
event_name=event_name,
event_cat_name=event_cat_name,
)
img.save()
form.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
-------------------- upload.htnl --------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Portfolio Image Upload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment