2016-12-17 4 views
0

編集: Djangoのオブジェクトの1つの中の単一のフィールドの値を更新しようとしています。ここでは、コードは次のとおりです。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 

しかし、私はエラーを取得しておいてください。

TemplateDoesNotExist at /8/complete list/todo_detail.html

この問題を回避するにはどうすればよいですか?私は、単にこのビューがDB内の特定の値を反転させることを望みます。

+0

データベースを移行しましたか? –

+0

はい。私はまたちょうど再度チェックした。変更はありません。 – MadPhysicist

+0

なぜ 'objects'が' NoneType'になるのかわかりません。完全なスタックトレースを表示できますか? –

答えて

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. DetailViewサブクラスSingleObjectTemplateResponseMixinからサブクラス化されたテンプレートをレンダリングしようとすると、エラーが発生します。

関連する問題