首页 > 解决方案 > 为什么我在提交表单时收到此 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>

标签: django

解决方案


您正在使用一个表单,因此这意味着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本身。


推荐阅读