Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

344
Vistas
El formset de Django crea múltiples entradas para la carga de múltiples imágenes

Estoy tratando de crear un formulario simple para compartir publicaciones como este.

ingrese la descripción de la imagen aquí

Estoy usando formset para cargar imágenes. Pero esto me da entrada múltiple como puede ver. Además, cada entrada puede elegir una sola imagen. Pero estoy tratando de cargar varias imágenes con una sola entrada.

vistas.py

 def share(request): ImageFormSet = modelformset_factory(Images, form=ImageForm, extra=3) # 'extra' means the number of photos that you can upload ^ if request.method == 'POST': postForm = PostForm(request.POST) formset = ImageFormSet(request.POST, request.FILES, queryset=Images.objects.none()) if postForm.is_valid() and formset.is_valid(): post = postForm.save(commit=False) post.author = request.user post.save() for form in formset.cleaned_data: # this helps to not crash if the user # do not upload all the photos if form: image = form['image'] photo = Images(post=post, image=image) photo.save() return redirect("index") else: print(postForm.errors, formset.errors) else: postForm = PostForm() formset = ImageFormSet(queryset=Images.objects.none()) return render(request, "share.html", {"postForm": postForm, 'formset': formset})

compartir.html

 <form method="POST" id="post-form" class="post-form js-post-form" enctype="multipart/form-data"> {% csrf_token %} {{ formset.management_form }} {% for form in formset %} {{ form }} {% endfor %} </form>

si lo necesita, formularios.py

 class PostForm(forms.ModelForm): class Meta: model = Post fields = ["title", "content"] def __init__(self, *args, **kwargs): super(PostForm, self).__init__(*args, **kwargs) self.fields['title'].widget.attrs.update({'class': 'input'}) self.fields['content'].widget.attrs.update({'class': 'textarea'}) class ImageForm(forms.ModelForm): image = forms.ImageField(label='Image') class Meta: model = Images fields = ('image', ) def __init__(self, *args, **kwargs): self.fields['image'].widget.attrs.update( {'class': 'fileinput', 'multiple': True})

modelos.py

 from django.db import models from django.contrib.auth.models import User from django.template.defaultfilters import slugify class Post(models.Model): # on_delete ile, bu kullanıcı silindiğinde bu kullanıcıya ait tüm postlar da silinecek. author = models.ForeignKey( "auth.User", on_delete=models.CASCADE, verbose_name="Yazar") title = models.CharField(max_length=150, verbose_name="Başlık") content = models.TextField(verbose_name="İçerik") # auto_now_add = True ile veritabanına eklendiği tarihi otomatik alacak created_date = models.DateTimeField(auto_now_add=True) # admin panelinde Post Object 1 yazması yerine başlığı yazsın istersek... def __str__(self): return self.title def get_image_filename(instance, filename): title = instance.post.title slug = slugify(title) return "post_images/%s-%s" % (slug, filename) class Images(models.Model): post = models.ForeignKey( Post, on_delete=models.DO_NOTHING, default=None) image = models.ImageField(upload_to=get_image_filename, verbose_name='Image', default="images/default_game_img.png")
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si necesita uno archivado para la carga de múltiples imágenes, intente esto:

vistas.py

 from .forms import PostForm from .models import Post, Images def share(request): form = PostForm() if request.method == 'POST': post = Post() post.title = request.POST['title'] post.content = request.POST['content'] post.author = request.user post.save() for image in request.FILES.getlist('images'): image_obj = Image() image_obj.post_id = post.id image_obj.image = image image_obj.save() return render(request, 'share.html', {'form': form})

formularios.py

 from django import forms class PostForm(forms.Form): title = forms.CharField(label='', widget=forms.TextInput(attrs={ 'class': 'input', } )) content = forms.CharField(label='', widget=forms.Textarea(attrs={ 'class': 'textarea', } )) images = forms.ImageField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

compartir.html

 <form method="POST" id="post-form" class="post-form js-post-form" enctype="multipart/form-data"> {% csrf_token %} {% for elem in form %} {{ elem }} {% endfor %} </form>
over 4 years ago · Santiago Trujillo Denunciar

0

Creo que estás pensando demasiado en la implementación, deberías probar lib como django-multiupload

Y puede encontrar una implementación válida para la carga de imágenes múltiples a través de este enlace

https://stackoverflow.com/a/44075555/10798048

Espero que esto facilite su implementación y resuelva su problema. Corrígeme si no te funciona.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda