使用CBV form_invalid()方法更新Model对象

时间:2014-04-28 16:01:33

标签: python django

我想更新模型中的现有对象。但我正在使用form_invalid(self, form)

**views.py**
class SomeClassView(UpdateView):
    model = Some
    form_class = SomeForm
    template_name = 'some.html'

    def form_invalid(self, form):
        Some.objects.get(id=self.kwargs['pk']).update(**form.cleaned_data)
        return HttpResponseRedirect(self.request.POST['redirect_url'])

**urls.py**
url(r'^edit/(?P<pk>\d+)/$', SomeclassView.as_view(), name='edit'),

我在我的模型中以相同的方式在我的其他类中创建新对象,但是我无法更新它并且我收到此错误:

AttributeError at /edit/1/
'Some' object has no attribute 'update'

1 个答案:

答案 0 :(得分:2)

这是因为get()没有返回查询集。相反,它返回模型的实例。

尝试替换

Some.objects.get(id=self.kwargs['pk']).update(**form.cleaned_data)

Some.objects.filter(id=self.kwargs['pk']).update(**form.cleaned_data)

阅读Queryset API reference了解详情。