2017-02-07 5 views
2

Ich muss mehrere Bilder in meinem Formular hochladen, aber ich habe nur ein Bildfeld, ich möchte nicht mehr Bildfelder haben die Hauptidee ist ein für jeden in der Speichermethode oder so etwas tun, aber ich habe keine Idee, das zu tun, bitte helfen.Wie kann ich mehrere Bilder gleichzeitig in Django hochladen?

Das ist mein Modell:

class Archivos(models.Model): 
    id_archivo = models.AutoField(primary_key=True) 
    id_unidad = models.IntegerField() 
    nombre_archivo = models.CharField(max_length=255, blank=True) 
    imagen = models.ImageField(upload_to='img', null=True, blank=True) 

I edited meine def Post

def post(self, request, *args, **kwargs): 
    form_class = self.get_form_class() 
    form = self.get_form(form_class) 
    files = request.FILES.getlist('imagen') 
    if form.is_valid(): 
     a = 0 
     for imagen in files: 
      a = a+1 
      img = form.save(commit=False) 
      img.id_unidad = 1 
      img.nombre_archivo ='hhh'+ str(a) 

      img.save() 
     print(a); 

     return self.form_valid(form) 

    else: 
     return self.form_invalid(form) 

Die für cicle funktioniert, aber immer das letzte Bild speichern. Ich denke, es funktioniert wie und aktualisieren, aber ich verstehe nicht warum?

dies ist ein Teil meiner Form in einer Vorlage:

the multiple imagefield

Antwort

0

Wie @Zagorodniy vorgeschlagen hat, möchten Sie wahrscheinlich eine zusätzliche Tabelle, um die Sammlung der hochgeladenen Bilder zueinander in Beziehung zu halten, indem Sie eine ForeignKey in Ihrer Bildtabelle verwenden. (Wenn Sie so etwas brauchen).

files = request.FILES.getlist('imagen') 
if form.is_valid(): 

    for image in files: 
     instance = Planfile(
     nombre_archivo = ... , 
     id_unidad = ... , 
     imagen = image 
     ) 
     instance.save() 
    ... 
+0

Danke:

, jedenfalls mehrere Bilder, erstellen Sie Instanzen von Archivos Modell in for-Schleife und speichern Sie sie eins nach dem anderen zu retten! Um mir zu helfen, funktioniert deine Antwort. –

0

Sie sollten mehrt Werte mit getlist zugreifen können:

Hier ein Beispiel ist:

for bfile in request.FILES.getlist('files'): 
    File(file=bfile, files=testing).save() 
+0

I edited meine Post-Funktion überprüfen Sie es bitte –

0

One Die Auswahl besteht darin, ein weiteres Modell zum Beispiel ArchivosGallery mit ForeignKey auf Ihrem Produkt zu erstellen. wenn Ihr Produktmodell Archivos Zum Beispiel genannt wird, dann sollten Sie erstellen:

class ArchivosGallery(models.Model): 
    image = models.ImageField(u'Images', upload_to='countries/images/', blank=True) 
    countries = models.ForeignKey('Archivos', blank=True, null=True) 

hinzufügen Bilder in der Produkt Admin Sie diesen Code hinzufügen müssen in admin.py:

class ImagesInline(admin.TabularInline): 
    model = ArchivosGallery 

class ArchivosAdmin(admin.ModelAdmin): 
    inlines = [ 
    ImagesInline, 
    ] 
admin.site.register(Archivos, ArchivosAdmin) 

Hoffnung seine hilft Ihnen

Verwandte Themen