![](/img/trans.png)
[英]Django: save() got an unexpected keyword argument 'commit'
[英]save() got an unexpected keyword argument 'commit' Django Error
我发现这个错误“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)
)
你没有对django.forms.ModelForm进行子类化 ,但是,你正在编写你的代码。
您需要子类化ModelForm(它具有带commit参数的save方法)。
调用super也不会工作,因为超类没有使用该参数的save方法。
除非你将代码重写为子类django.forms.ModelForm,否则删除commit = False它将永远不会工作
在任何情况下,save方法都应该始终返回一个实例。 我建议你将你的方法重命名为save_all_files或类似的东西。 您将无法使用commit = False在save方法中保存多个对象。 这不是预期用途。
对于进一步的阅读,您可以阅读源知道如何提交=中的ModelForm类 假作品,地址如下:
https://github.com/django/django/blob/master/django/forms/models.py
我相信你完全重写了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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.