我试图研究和理解文档,但无法解决我的问题。
我有一个ModelForm,它允许我选择和上传多个文件。但是,在保存时,尽管有多个选择,但只有一个文件保存到我的媒体根文件夹中。
我的猜测是getlist中所有文件的文件名都是相同的(因为它们是同时上传的),它在某种程度上覆盖了彼此,最终只保存了一个媒体。感谢来自社区的帮助,谢谢!
forms.py
class FileFieldForm(forms.ModelForm):
stuff_image = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
class Meta:
model = Thing
fields = ('title', 'description', 'quantity','stuff_image')
--
model.py
def generate_filename(instance, filename):
ext = filename.split('.')[-1]
return '' + str(int(time())) + '.' + ext
class Thing(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(blank = True)
quantity = models.IntegerField(blank =True)
creation_date = models.DateTimeField(auto_now_add=True)
stuff_image = models.FileField(upload_to=generate_filename)
def __unicode__(self):
return self.title
class Meta:
ordering = ['title']
@receiver(post_delete, sender=Thing)
def stuff_post_delete_handler(sender, **kwargs):
Thing = kwargs['instance']
storage, path = Thing.stuff_image.storage, Thing.stuff_image.path
storage.delete(path)
--
view.py
def create_stuff(request):
if request.method == 'POST':
form = FileFieldForm(request.POST, request.FILES)
files = request.FILES.getlist('stuff_image')
if form.is_valid():
for f in files:
form.save()
return redirect('list-stuff')
else:
form = FileFieldForm()
return render(request, 'stuffapp/create_stuff.html', {'form': form})
发布于 2017-09-19 17:25:01
如果您希望将多个图像链接到Thing
模型,则需要创建一个带有ForeignKey of Thing
模型的Image
模型。FileField一次只能与一个文件相关。
发布于 2017-09-19 20:38:32
要在django中上传多个图像/文件,最好使用django-multiupload包,请参阅(文档)[https://pypi.python.org/pypi/django-multiupload]或(GitHub页面)[https://github.com/Chive/django-multiupload]。只需按照说明和示例操作即可。工作完美无瑕。
https://stackoverflow.com/questions/46305852
复制