2016-06-20 23 views
0

公式チュートリアルのパート5をちょうど守っているうちに、私は問題に遭遇しました。ハイパーリンクされたAPIは非常にうまく機能し、スニペットをクリックすると期待します。たとえば、次のように:URLの「スニペットシリアライザ」オブジェクトは呼び出し可能ではありません

HTTP 200 OK 
Allow: GET, POST, HEAD, OPTIONS 
Content-Type: application/json 
Vary: Accept 

{ 
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [ 
     { 
      "url": "http://localhost:8000/snippets/1/", 
      "owner": "ankush", 
      "title": "", 
      "code": "print 123", 
      "linenos": false, 
      "language": "python", 
      "style": "friendly", 
      "highlight": "http://localhost:8000/snippets/1/highlight/" 
     } 
    ] 
} 

クリックは私にこの例外を与える:「スニペットシリアライザ」オブジェクトは呼び出すことはできません。私はチュートリアルからすべてを正しくコピーしたと思ったが、明らかに私はしなかった。コードはここにある:https://github.com/ankush981/rest-demo

Finally, here's the entire trace: 

Environment: 


Request Method: GET 
Request URL: http://localhost:8000/snippets/1/ 

Django Version: 1.9.7 
Python Version: 3.4.3 
Installed Applications: 
('rest_framework', 
'snippets', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 



Traceback: 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    58.   return view_func(*args, **kwargs) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/rest_framework/views.py" in dispatch 
    466.    response = self.handle_exception(exc) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/rest_framework/views.py" in dispatch 
    463.    response = handler(request, *args, **kwargs) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/rest_framework/generics.py" in get 
    286.   return self.retrieve(request, *args, **kwargs) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/rest_framework/mixins.py" in retrieve 
    57.   serializer = self.get_serializer(instance) 

File "/media/common/code/python/django-rest/tutorial/env/lib/python3.4/site-packages/rest_framework/generics.py" in get_serializer 
    111.   return serializer_class(*args, **kwargs) 

Exception Type: TypeError at /snippets/1/ 
Exception Value: 'SnippetSerializer' object is not callable 
+0

serializer.pyとview.pyのインポートを確認してください。 –

+0

@HamedRostami正確に何を探すべきかわかりません。つまり、/ snippets/1/'以外のものはすべて動作しています。ソースコードをご覧ください。 https://github.com/ankush981/rest-demo – dotslash

答えて

2

OK親愛なるdotslash 私はそのコードを確認してください。

は、このべきではない:

class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): 
    '''Retrieve, update or delete a snippet''' 
    queryset = Snippet.objects.all() 
    serializer_class = SnippetSerializer() 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly) 

はということ:

class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): 
    '''Retrieve, update or delete a snippet''' 
    queryset = Snippet.objects.all() 
    serializer_class = SnippetSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly) 

Result

+1

はい、初級ミスです。これに時間をかけていただき、ありがとうございます。それは私のキャリアに借りているあなたのような人です! :-) – dotslash

関連する問題