【发布时间】:2019-12-24 09:07:05
【问题描述】:
我有一个带有附加字段的 django ModelForm 来上传一些文件。但是,我需要保存的模型才能对文件执行任何操作,而且我不确定在哪里或如何执行此操作。
我正在关注docs here。
我要么需要在 FormView 中获取保存的模型,要么需要在 Form 中处理它:
class MessageForm(forms.ModelForm):
class Meta:
model = Message
file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
files = self.cleaned_data.get('files')
# do stuff with files here...
# BUT I only get ONE file here, regardless of how many are uploaded with the form.
有没有办法让我获取Form的save方法中的所有文件?
或者,我可以通过视图获取所有文件,但是如何获取我需要的已保存模型?此表单正在创建一个新对象,我需要该对象才能对文件进行处理:
class FileFieldView(FormView):
form_class = MessageForm
template_name = 'upload.html' # Replace with your template.
success_url = '...' # Replace with your URL or reverse().
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.
# BUT how do I get the saved object? I don't think it has been saved at this point anyway?
return self.form_valid(form)
else:
return self.form_invalid(form)
【问题讨论】:
标签: django django-forms django-class-based-views