2016-06-20 3 views
0

Пройдя только часть 5 официального учебника, у меня возникла проблема. API с гиперссылками работает очень хорошо, ожидайте, когда я нажму на фрагмент. Например, в следующем:Объект «Снайперский сериализатор» не может быть вызван

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/" 
     } 
    ] 
} 

щелчок на URL дает мне это исключение: объект «SNIPPET Serializer» не отозваны. Мне казалось, что я правильно скопировал все из учебника, но, видимо, я этого не сделал. Код здесь: 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

нормально дорогой 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

Смежные вопросы