已编辑:我正在尝试更新其中一个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中翻转某个值。
答案 0 :(得分:3)
您从DetailView类继承视图,默认情况下是查看某些模型而不是更改。另外,显然,您使用GET
请求来更改数据。这是错误的做法。
或者,我建议您尝试从SingleObjectMixin和View继承您的观点,并为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。您收到错误,因为来自SingleObjectTemplateResponseMixin的DetailView
子类尝试呈现名为<model_name>_detail.html
的模板。