2016-01-16 65 views
0

我試圖用save method來更新模型的領域:如何使用保存方法從表單中更新模型的字段Django?

forms.py:

class FooForm(forms.ModelForm): 
    class Meta: 
     model = Foo 
     exclude = ['created'] 

views.py:

class FooView(FormView): 
    success_url = '/some/url/' 
    template_name = 'some/template.html' 
    form_class = FooForm 
    model = Foo 

    def form_valid(self, form): 
     if 'foo' in self.request.session: 
      pk = self.request.session['foo'] 
      foo = Foo.objects.get(pk=pk) 
      self.object = form.save(instance=foo) 
     else: 
      self.object = form.save() 
      self.request.session['foo'] = self.object.pk 
     return HttpResponseRedirect(self.get_success_url()) 

我有一個錯誤的時候,我嘗試使用form.save(instance = foo):

TypeError at /some/url 
save() got an unexpected keyword argument 'instance' 

我的問題是什麼?

的Django 1.9.0

的Python 3.4.3

回答

2

如果你讀,你鏈接的文檔很,你會看到instance關鍵字輸入到的ModelForm構造函數,而不是保存方法。

你需要做這樣的事情

form = FooForm(instance=foo) 
form.save() 
0

你應該到save方法提供了一個實例的形式的構造,不是。 要使其起作用,您應該使用UpdateView

0
def form_valid(self, form): 
     if 'foo' in self.request.session: 
      pk = self.request.session['foo'] 
      foo = Foo.objects.get(pk=pk) 
      foo_form = self.form_class(form.cleaned_data, instance=foo) 
      foo_form.save() 
相關問題