Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django上传多个媒体并保存

Django上传多个媒体并保存
EN

Stack Overflow用户
提问于 2017-09-19 16:50:41
回答 2查看 209关注 0票数 1

我试图研究和理解文档,但无法解决我的问题。

我有一个ModelForm,它允许我选择和上传多个文件。但是,在保存时,尽管有多个选择,但只有一个文件保存到我的媒体根文件夹中。

我的猜测是getlist中所有文件的文件名都是相同的(因为它们是同时上传的),它在某种程度上覆盖了彼此,最终只保存了一个媒体。感谢来自社区的帮助,谢谢!

代码语言:javascript
运行
AI代码解释
复制
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')

--

代码语言:javascript
运行
AI代码解释
复制
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)

--

代码语言:javascript
运行
AI代码解释
复制
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})
EN

回答 2

Stack Overflow用户

发布于 2017-09-19 17:25:01

如果您希望将多个图像链接到Thing模型,则需要创建一个带有ForeignKey of Thing模型的Image模型。FileField一次只能与一个文件相关。

票数 0
EN

Stack Overflow用户

发布于 2017-09-19 20:38:32

要在django中上传多个图像/文件,最好使用django-multiupload包,请参阅(文档)[https://pypi.python.org/pypi/django-multiupload]或(GitHub页面)[https://github.com/Chive/django-multiupload]。只需按照说明和示例操作即可。工作完美无瑕。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46305852

复制
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档