在Django视图中更新单个对象字段

时间:2016-12-17 22:34:24

标签: python django django-views

已编辑:我正在尝试更新其中一个Django对象中的单个字段的值。这是代码:

class TodoCompleteView(generic.DetailView):        
    queryset = Todo.objects.all()

    def get_object(self):
        # Call the superclass
        object = super(TodoCompleteView, self).get_object()
        # Record the last accessed date
        object.todo_completed = True
        object.save()
        # Return the object
        return object

但是,我一直收到错误:

  

在/ 8 /完成的TemplateDoesNotExist   列表/ todo_detail.html

怎么能避免这个?我只是希望这个视图在DB中翻转某个值。

1 个答案:

答案 0 :(得分:3)

您从DetailView类继承视图,默认情况下是查看某些模型而不是更改。另外,显然,您使用GET请求来更改数据。这是错误的做法。

或者,我建议您尝试从SingleObjectMixinView继承您的观点,并为POST请求手动创建处理程序。

我会像这样重写你的例子:

from django.views.generic import View
from django.views.generic.detail import SingleObjectMixin

class TodoCompleteView(SingleObjectMixin, View):
    model = Todo

    def post(self, *args, **kwargs):
        self.object = self.get_object()
        self.object.todo_completed = True
        self.object.save(update_fields=('todo_completed', ))
        return HttpResponse(status=204)

P.S。您收到错误,因为来自SingleObjectTemplateResponseMixinDetailView子类尝试呈现名为<model_name>_detail.html的模板。