首页 > 解决方案 > 当form.save()不返回对象时,如何在保存模型表单对象后从django FileField中获取多个文件

问题描述

我有一个 django 表单类,它扩展了django-postman 的 WriteForm(它是一个 ModelForm),并带有一个额外的字段来上传一些文件。

from postman.forms import WriteForm

class MyWriteForm(WriteForm):
    file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

但是,在对文件进行任何操作之前,我需要保存的模型。如果我按照文档中的示例,我可以扩展邮递员FormView并覆盖该save()方法:

from postman.views import FormView

class MyFormView(FormView):
    form_class = MyWriteForm

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        files = request.FILES.getlist('file_field')
        if form.is_valid():
            for f in files:
                # Do something with each file.
                result = form.save()  # result is a Boolean instead of the object!

            return self.form_valid(form)
        else:
            return self.form_invalid(form)

但是,django-postman WriteForm 的save()方法并没有按预期返回对象,而是返回一个布尔值。

保存后还有其他方法可以获取 ModelForm 的对象吗?是通过视图还是形式?

标签: djangodjango-formsdjango-class-based-views

解决方案


推荐阅读