MultiValueDictKeyError Django

时间:2018-09-19 02:25:35

标签: python django

我正在尝试运行简单的表单,但是我有成本,我没有使用django的forms.forms,而是直接从HTML生成表单。

好吧,我的表单仅具有1个文件字段和一个发布按钮,在该字段中我想添加一个.xlsx并从该文件中获取数据并将其注册到特定模型中,但这会给我以下错误:

django.utils.datastructures.MultiValueDictKeyError: "'ar'"

acontinuacion我想向您展示如何构造代码,但我不明白为什么会出错,我也想给我一个关于如何获取输入中选择的excel数据的想法文件并在bd中注册:

查看:

from django.views.generic import View
from django.shortcuts import render,redirect
from condominio.models import *

class TestExcel(View):
    def post (self, request, *args, **kwargs):
        print (request.FILES)
        file = request.FILES['ar']
        return HttpResponse('this is post')
    def get(self, request, *args, **kwargs):
        return render(request ,'testing.html' ,{})

模板:

{% extends 'base.html' %}
{% load staticfiles %}
{% load static %}

{% block content %}

<div class="container">
    <div class="row">
  <form action="#" method="POST">
    {% csrf_token %}
    <div class="file-field input-field">
      <div class="btn">
        <span>File</span>
        <input name="ar" id = "ar" type="file" >
      </div>
      <div class="file-path-wrapper">
        <input class="file-path validate" type="text" >
      </div>
    </div>
    <button class="btn waves-effect waves-light" type="submit" name="action">Submit
    <i class="material-icons right">send</i>
  </button>
  </form>
    </div>
</div>


{% endblock %}

1 个答案:

答案 0 :(得分:2)

您应将enctype="multipart/form-data"属性添加到form标记中:

<form action="#" method="POST" enctype="multipart/form-data">

摘录自Django's documentation

  

请注意,如果request方法,则request.FILES仅包含数据   是POST,发布请求的具有属性   enctype =“ multipart / form-data”。否则,request.FILES将为空。