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

时间:2018-03-10 15:10:12

标签: python django

在我的forms.py中,我有一个包含save()方法的自定义ModelForm:

def save(self):
    bus = super().save(commit=False)

    datei = self.upload.name

    original_dateiname = datei.name
    extension = original_dateiname.split('.')[-1]

    a = Datei.objects.create(file=datei, original_dateiname=original_dateiname, extension=extension)

    self.datei = a

    bus.save()
    return bus

然而,现在我收到错误: save() got an unexpected keyword argument 'commit'

这里有什么问题?

2 个答案:

答案 0 :(得分:1)

您已重新定义了save方法,因此它不再需要提交参数,但在视图中保存表单时仍然会传递一个。您应该接受该参数并使用它来确定是否将对象保存到db。

def save(self, commit=True):
    bus = super().save(commit=False)
    ...
    if commit:
        bus.save()
    return bus

答案 1 :(得分:1)

您已覆盖save方法,但尚未保留其签名。您需要接受与原始方法相同的参数,并在调用super时将其传入。

def save(self, *args, **kwargs):
    super().save((*args, **kwargs)
    ...