繁体   English   中英

save()得到了一个意外的关键字参数'commit'Django Error

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM