python - save() 得到了一个意外的关键字参数 'commit' Django 错误

标签 python django

我收到这个错误“save() 得到了一个意外的关键字参数‘commit’” 我想做的是在用户上传他的文件时请求用户。

更新我添加了我的 model.py 和 forms.py 以及错误的屏幕截图对不起我第一次学习 python/django。

screen shot

模型.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', )

表单.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(它具有带提交参数的保存方法)。

调用 super 也不起作用,因为父类(super class)没有带有该参数的保存方法。

删除 commit=False 除非您将代码重写为 django.forms.ModelForm 的子类,否则它永远不会工作

在任何情况下,save 方法都应该返回一个实例。我建议您将方法重命名为 save_all_files 或类似名称。您将无法使用 commit=False 在保存方法中保存多个对象。这不是预期用途。

如需进一步阅读,您可以阅读源代码以了解 commit=FalseModelForm 类 中的工作原理,地址如下:

https://github.com/django/django/blob/master/django/forms/models.py

关于python - save() 得到了一个意外的关键字参数 'commit' Django 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131198/

相关文章:

python - 为什么 URL 调度程序既不重定向也不更新数据库?

python - Django objects.all() 空查询集,在 shell 中不为空

使用 pdb 时 Django UnicodeDecodeError

Django - View 中的参数而不是网址中的参数

python - 获取标签之间的多个文本 block

python - 无法使用python通过谷歌驱动器API下载谷歌电子表格

python - 程序在 if while 使用循环之后结束,但它不应该结束

python - 如何在没有输入的情况下使用 raw_input

python - 从稀疏矩阵的行创建稀疏对角矩阵

javascript - 将 JS 库与 Django 一起使用