发现此错误" save()得到了一个意外的关键字参数' commit'" 我试图做的是在用户上传文件时请求用户。
更新我添加了我的model.py和forms.py以及错误的屏幕截图对不起我的fisrt时间学习python / django。
model.py
class Document(models.Model):
fs = FileSystemStorage(location=settings.MEDIA_ROOT)
input_file = models.FileField(max_length=255, upload_to='uploads', storage=fs)
user = models.ForeignKey(User)
def __unicode__(self):
return self.input_file.name
@models.permalink
def get_absolute_url(self):
return ('upload-delete', )
forms.py
class BaseForm(FileFormMixin, django_bootstrap3_form.BootstrapForm):
title = django_bootstrap3_form.CharField()
class MultipleFileExampleForm(BaseForm):
input_file = MultipleUploadedFileField()
def save(self):
for f in self.cleaned_data['input_file']:
Document.objects.create(
input_file=f
)
这是我的views.py
@login_required
def list(request):
# Handle file upload
if request.method == 'POST':
form = MultipleFileExampleForm(request.POST, request.FILES)
if form.is_valid():
newdoc = form.save(commit=False)
newdoc.user = request.user
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('myfiles.views.list'))
else:
form = MultipleFileExampleForm() # A empty, unbound form
documents = Document.objects.all
return render_to_response(
'example_form.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
答案 0 :(得分:3)
你没有对 django.forms.ModelForm 进行子类化,但是,你正在编写你的代码。
你需要继承ModelForm(它的save方法带有commit参数)。
调用super也不会工作,因为超类没有带该参数的save方法。
删除 commit = False 除非您将代码重写为子类 django.forms.ModelForm
,否则它将无法工作在任何情况下,save方法都应该始终返回一个实例。我建议您将方法重命名为 save_all_files 或类似的东西。您将无法使用 commit = False 在save方法中保存多个对象。这不是预期用途。
如需进一步阅读,您可以在以下地址阅读来源,了解提交=错误如何在 ModelForm类中运行:
https://github.com/django/django/blob/master/django/forms/models.py
答案 1 :(得分:0)
我相信你完全覆盖了save方法,它取消了现有的功能(即提交arg)。尝试在最后运行super()
,以便它也具有现有的保存功能。
def save(self):
for f in self.cleaned_data['input_file']:
Document.objects.create(
input_file=f
)
super(MultipleFileExampleForm, self).save(*args, **kwargs)