Last active
February 3, 2020 05:10
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-------------------- 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