django - 表单上的 For 循环无法正常工作
问题描述
我有一项功能,允许用户将多张图片上传到他们的博客,但它无法正常工作。当用户上传多张图片时,只有其中一张会上传到 postgres 数据库。
看法
def DetailPostView(request, pk):
model = Post
post = Post.objects.get(pk=pk)
if request.method == 'POST':
test = PostImagesForm(request.POST, request.FILES)
files = request.FILES.getlist('images')
if test.is_valid():
for f in files:
instance = test.save(commit=False)
instance.post = Post.objects.get(pk=pk)
instance.save()
else:
print(instance.errors)
postgallery = PostImages.objects.filter(post_id=post)
context = {
'post':post, 'PostImagesForm':PostImagesForm, 'postgallery':postgallery
}
return render(request, 'blog/post_detail.html', context)
形式
class PostImagesForm(ModelForm):
class Meta:
model = PostImages
fields = ('images',)
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple': True}),
}
您可以看到我通过files = request.FILES.getlist('images')
然后在内容上运行 for 循环来获取文件列表。
如果我破坏堆栈跟踪中的代码,我可以看到这两个文件在列表中,所以我很困惑为什么它没有正确地遍历列表并将每个文件上传到数据库。
更新
查看文档并找到有关多图像上传的部分,文档的操作方式与我相同。还是很迷茫。
解决方案
我相信问题是因为我没有将当前图像传递给模型,所以它只上传了第一张图像。
解决方案
if request.method == 'POST':
for f in request.FILES.getlist('images'):
test = PostImagesForm(request.POST, request.FILES)
if test.is_valid():
instance = test.save(commit=False)
instance.post = Post.objects.get(pk=pk)
instance.images = f
instance.save()
推荐阅读
- python - 用于“修剪”正态分布的 cdf
- java - 简单线程不能完全并行执行
- java - 如何在不存储数据两次的情况下链接 2 个不同的类对象中的数据
- python - Selenium 除了启动浏览器并打开页面外无法正常工作
- javascript - 如何从 React 项目的 API URL 中删除冒号 (:)
- javascript - 从他的父母那里获取元素的索引
- python - 如何让 PyCharm 从由 PyScaffold 创建的 setup.cfg 中获取测试配置?
- java - IntelliJ:逐步调试新的 HashSet():字段在没有看到的情况下被初始化
- windev - HyperFile如何休息密码
- kubernetes - Kubernetes HPA 节点删除宽限期