【问题标题】:Django unable to bind uploaded fileDjango 无法绑定上传的文件
【发布时间】:2022-08-23 01:55:14
【问题描述】:

澄清:我正在开发 django 管理模块。

我使用简单的FileField 表单实现了 csv 模型上传,并使用TextIOWrapper 读取上传的文本文件,没有任何问题。

我正在尝试添加一个中间屏幕,警告用户可能丢失数据。我将它基于管理员删除操作确认屏幕。我遇到的问题是将内存中上传的文件传递到中间屏幕,以便在用户确认后访问它。我尝试使用绑定表单执行此操作,但上传的数据似乎消失了。

我正在使用一个非常简单的表格:

class CsvImportForm(forms.Form):
    csv_file = forms.FileField()
    overwrite = forms.BooleanField()

服务 GET 视图时我没有问题。

现在是有趣的部分。在处理POST 请求的相同视图时,我尝试绑定表单as per the documentation,并将其传递给模板生成器:

def import_csv(self, request, form_url=\"\", extra_context=None):
    ...
    if request.method == \"POST\":
        form = CsvImportForm(request.POST, request.FILES)
        context.update({\'form\': form})
        ...
        return TemplateResponse(
            request,
            \"admin/import_confirm.html\",
            context
    )

import_csv 方法是我的ModelAdmin 子类的一部分,通过覆盖get_urls 方法来调用。

模板像这样构建表单:

<form action=\"{{ form_url }}\" method=\"post\" enctype=\"multipart/form-data\">{% csrf_token %}
    ...
    {{ form.csv_file }}
    ...
    <input type=\"submit\" value=\"{% translate \'Yes, I’m sure\' %}\">
    <a href=\"#\" class=\"button cancel-link\">{% translate \"No, take me back\" %}</a>
    ...
</form>

但是,在加载此视图时,内置的 ClearableFileInput 显示为空。我什至尝试加载与GET 视图相同的模板,但出现了同样的问题。特别要注意的是,如果我选择放置 BooleanField,它会正确绑定。

在调试过程中,文件存在于request.FILES 中,但在将视图传递给渲染器后它会以某种方式消失。

我在看什么?还是有更好的方法来传递文件?

  • form.is_valid() 之后您是否看到任何错误?您可以通过form.errors 看到它。
  • @NKSM form.is_valid() 在创建绑定表单后返回 True

标签: python django csv django-forms django-templates


【解决方案1】:

我发现出于安全原因,无法为用户提供带有绑定文件的表单。

我的解决方案是使用 javascript 弹出窗口,这样就不必重新加载内容。

【讨论】:

    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2014-10-28
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多