2017-02-07 6 views
2

フォームに複数の画像をアップロードする必要がありますが、画像フィールドが1つしかありません。主なアイデアはsaveメソッドやそれに類するものではありません。それをするアイデア、助けてください。Djangoで同時に複数の画像をアップロードするにはどうしたらいいですか?

これは私のモデルである:

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) 

私は私のデフcicle作品の

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) 

ザ・ポストが、常に最後の画像を保存し編集しました。私はそれが動作していると思うし、アップデートしていると思いますが、なぜそれほど理解できませんか?

これは、テンプレートの私のフォームの一部です:

the multiple imagefield

答えて

0

@Zagorodniyは、画像テーブルにForeignKeyを使用して、お互いに関連したアップロードされた画像のコレクションを保持するために余分なテーブルを必要とすることを示唆しました。 (もしあなたがそのようなことが必要な場合)。 、複数の画像を保存するループの中でArchivosモデルのインスタンスを作成し、それを一つずつを保存するためにとにかく

、:

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

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

ありがとうございました!私の助けを借りて、あなたの答えが働きます。 –

0

あなたはGETLISTでマルチパート値にアクセスすることができるはずです。

ここでは例です:

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

私は私のポスト機能がそれをチェックし、編集してください –

0

ワンたとえば、ArchivosGalleryForeignKeyのようなもう1つのモデルを製品に作成することです。お使いの製品モデルはArchivosと呼ばれる場合たとえば、あなたが作成する必要があります。

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

をあなたはadmin.pyにこのコードを追加する必要があり、製品の管理者に画像を追加するには:

class ImagesInline(admin.TabularInline): 
    model = ArchivosGallery 

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

は、そのあなた

お役に立てば幸いです
関連する問題