django - 为什么我在提交表单时收到此 AttributeError
问题描述
我提交表单时出错。当它加载这是我得到的错误:'list' object has no attribute 'imageuploader_profile
@login_required
def upload(request):
PostFormSet = modelformset_factory(Image, fields=('image',), extra=2)
formset = PostFormSet(request.POST or None,request.FILES or None)
if request.method == "POST":
print(request.FILES)
if formset.is_valid():
post = formset.save(commit=False)
post.imageuploader_profile = request.user
post.save()
for f in formset:
try:
file = Image(
imageuploader_profile=post,
image=f.cleaned_data['image'],
image_caption=f.cleaned_data['image_caption'],
tag_someone=f.cleaned_data['tag_someone'],
)
file.save()
except:
break
else:
formset = PostFormSet(queryset=Image.objects.none())
return render(request, 'upload.html', {"formset": formset})
<form action="{% url 'site:upload' %}" method="post" enctype="multipart/form-data">
{%csrf_token%}
{{ formset }}
<button type="submit">Post</button>
</form>
解决方案
您正在使用一个表单集,因此这意味着formset.save(commit=False)
它将返回一个对象列表。因此,您可以使用以下方法遍历该列表:
# …
if formset.is_valid():
posts = formset.save(commit=False)
for post in posts:
post.imageuploader_profile = request.user
post.save()
# …
你不应该迭代它formset
本身。
推荐阅读
- c# - WPF 桌面应用程序连接字符串 - RSA 密钥容器解密问题
- python - 如何自动删除 PyTest 期间生成的临时文件?
- google-chrome - Graphiql (GraphQL UI) 无法在 Chrome 中加载,但在 Firefox 和 Safari 中有效
- azure - 如何在 HDInsight 上安装 Presto?
- mysql - 如果查询,则无法处理 Mysql 多个 else 的正确语法
- hadoop - 可以将 Hive 外部表位置创建到外部 hadoop 集群吗?
- python - 具有复杂路径的 Django urls 行为
- html - 在引导日期选择器中设置默认日期的问题
- javascript - 图像忽略来自 JavaScript 函数的“zIndex”指令
- android - 将APK转换为最小APK后如何解析?