我需要在我的表单中上传多个图片,但我只有一个图像区域,我不想拥有更多的图像区域,主要思想是在保存方法中为每个图像执行一个或类似的东西,但我不是&# 39;有任何想法,请帮助。
这是我的模特:
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)
我编辑了我的定义
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)
for cicle有效,但始终保存最后一张图像。我认为它的工作方式和更新但我不明白为什么?
这是我在模板中表单的一部分:
答案 0 :(得分:1)
其中一个选择是在您的产品上创建另一个模型,例如ArchivosGallery
,ForeignKey
。例如,如果您的产品型号名为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)
希望它可以帮助你
答案 1 :(得分:0)
您应该能够使用getlist访问多部分值:
以下是一个例子:
for bfile in request.FILES.getlist('files'):
File(file=bfile, files=testing).save()
答案 2 :(得分:0)
正如@Zagorodniy建议你可能需要一个额外的表来保持上传图像的集合彼此相关,使用图像表中的ForeignKey
。 (如果你需要这样的话)。
无论如何,要保存多个图像,请在for循环中创建Archivos
模型的实例并逐个保存:
files = request.FILES.getlist('imagen')
if form.is_valid():
for image in files:
instance = Planfile(
nombre_archivo = ... ,
id_unidad = ... ,
imagen = image
)
instance.save()
...