2016-01-16 1 views
0

Я пытаюсь обновить поля модели с save method:Как обновить поле модели Django из формы с помощью метода save?

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' 

В чем моя проблема?

Джанго 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() 
Смежные вопросы