2013-05-28 39 views
1

在我看来:django表单save()得到了一个意外的关键字参数?

image = simple_image_form.save(quiet=True) 

我的表格:

class SimpleImageForm(forms.ModelForm): 

    class Meta: 
     model = Image 
     fields = ("image",) 

    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop("request", None) 
     super(SimpleImageForm, self).__init__(*args, **kwargs) 

    def save(self, *args, **kwargs): 
     kwargs["commit"]=False 
     obj = super(SimpleImageForm, self).save(*args, **kwargs) 
     if self.request and self.request.user: 
      obj.member = self.request.user.get_current_member() 
      obj.save(*args, **kwargs) 
     return obj 

当我保存,我得到的错误:

save() got an unexpected keyword argument 'quiet' 

我想通过把** kwargs作为参数,这不会发生。我究竟做错了什么?

注:安静是在条件检查使用的obj.save函数中的参数,但既不是形式的属性或

+0

您的视图如何定义?你用什么'安静的? – karthikr

+0

我很努力地找出你的存储方法在哪里需要'安静'工作:D –

回答

3

是的,你可以重写处理kwarg obj的本身,而是你不应该与super一样拨打:

obj = super(SimpleImageForm, self).save(commit=False) 

应该这样做。这是因为ModelFormsave方法签名是:

def save(self, commit=True): 

所以也没有你所呼叫的方式相匹配。

希望这会有所帮助!

+0

这很有道理,只需看看https://github.com/django/django/blob/master/django/表格/ models.py。谢谢。 – Derek

+0

非常欢迎:) –

1

您需要有一个名为quiet的字段才能将值保存到该字段。我没有在表单中看到任何对此类字段的引用,所以我猜测模型中没有一个字段。即使存在,您可能也必须在表单中引用它,因为您正在定义正在使用的模型的哪些部分。

相关问题