【发布时间】: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