【问题标题】:AttributeError at /accounts/upload_save/ 'WSGIRequest' object has no attribute 'cleaned_data'/accounts/upload_save/ 'WSGIRequest' 对象的 AttributeError 没有属性 'cleaned_data'
【发布时间】:2018-04-04 02:31:55
【问题描述】:

我收到一个错误,AttributeError at /accounts/upload_save/ 'WSGIRequest' 对象没有属性 'cleaned_data'。我正在制作文件上传系统。如果我选​​择文件并按下“发送”按钮,选定的图像将发送到模型。但是现在,当我选择图像并输入“发送”时"按钮,错误发生。 我在views.py中写了

@login_required
@csrf_exempt
def upload_save(request):
    form = UserImageForm(request.POST, request.FILES)
    if request.method == "POST" and form.is_valid():
            data = form.save(commit=False)
            data.user = request.user
            data.image = request.cleaned_data['image']
            data.save()
            return render(request, 'photo.html')

    else:
        form = UserImageForm()
        return render(request, 'profile.html', {'form': form})

在 index.html 中

<main>
    <div class="detailimg col-xs-8">
        <div class="relative_ele">

            <div class="container" id="photoform">
                {% if form.errors %} 
                <div class="alert alert-danger" role="alert">
                     <p>At least 1 picture should be selected</p>  
                </div>
                {% endif %}

                <form action="/accounts/upload_save/" method="POST" enctype="multipart/form-data">
                    {% csrf_token %}
                    <div class="input-group">
                        <label class="input-group-btn" style="width: 80px;">
                            <span class="file_select btn-lg">
                                File Select1
                                <input type="file" name="image">
                            </span>
                        </label>
                        <input type="text" class="form-control" readonly="">  
                    </div>
                    <div class="input-group">
                        <label class="input-group-btn" style="width: 80px;">
                            <span class="btn-lg file_select">
                            File Select2
                            <input type="file" name="image2">
                            </span>
                        </label>
                        <input type="text" class="form-control" readonly="">  
                    </div>
                    <div class="form-group">
                        <input type="hidden" value="{{ p_id }}" name="p_id" class="form-control">
                    </div>
                    <div class="col-xs-offset-2">
                        <div class="form-group">
                            <input type="submit" value="SEND" class="form-control">
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</main>

我真的不明白为什么会发生这个错误。我在views.py中重写了

@login_required
@csrf_exempt
def upload_save(request):
    if request.method == "POST":
        form = UserImageForm(request.POST, request.FILES)
        if form.is_valid():
            data = form.save(commit=False)
            data.user = request.user
            data.image = form.cleaned_data['image']
            data.save()
        else:
            print(form.errors)
    else:
        form = UserImageForm()

    return render(request, 'registration/photo.html', {'form': form})

但同样的错误发生了。我应该如何解决这个问题?WSGIRequest 在我的代码中是哪一点?

【问题讨论】:

    标签: python django


    【解决方案1】:

    request.cleaned_data['image'] 无效,您应该使用form.cleaned_data,如第二个示例所示。

    如果你得到相同的AttributeError,那么你还没有重新启动你的服务器并且仍在运行旧代码。

    您可能根本不需要data.image = form.cleaned_data['image'] 行。模型表单将负责设置图像字段。使用commit=False保存后,只需更改表单中未包含的字段即可。

    if request.method == "POST" and form.is_valid():
            data = form.save(commit=False)
            data.user = request.user
            data.save()
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2018-09-06
      • 1970-01-01
      • 2011-03-15
      • 2021-07-04
      • 2021-12-13
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      相关资源
      最近更新 更多