2

Je suis nouveau à la fois SO et Django DRF. Chaque fois que j'essaie d'exécuter le code. Je reçois l'erreur "Objet TypeError ReturnDict non appelable".Objet ReturnDict non appelable Django Rest Framework

models.py

from __future__ import unicode_literals 

from django.db import models 

# Create your models here. 

class Fish(models.Model): 
    name=models.CharField(max_length=120) 
    created=models.DateTimeField(auto_now_add=True) 
    active = models.BooleanField() 

serializers.py

from fishes.models import Fish 
from rest_framework import serializers 

class FishSerializers(serializers.ModelSerializer): 
    success=serializers.SerializerMethodField('is_successful') 



    def is_successful(self,obj): 
     return self.context.get('value') 

    class Meta: 
     model=Fish 
     fields=('name', 'active', 'created','success') 

views.py

from django.shortcuts import render 
from rest_framework import viewsets 
from rest_framework import permissions 
from fishes.serializers import FishSerializers 
from fishes.models import Fish 
# Create your views here. 

class FishViewSets(viewsets.ModelViewSet): 
    queryset = Fish.objects.get(id=2) 
    serializer_class = FishSerializers(queryset,context={'value':'brother'}).data 

urls.py

from django.conf.urls import url,include 
from django.contrib import admin 
from rest_framework import routers 
from fishes import views 

router= routers.DefaultRouter() 
router.register(r'api/fishes',views.FishViewSets,base_name='FishViewSets') 
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^',include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
] 

error_trace

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/rest_framework/viewsets.py", line 87, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py", line 466, in dispatch 
    response = self.handle_exception(exc) 
    File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py", line 463, in dispatch 
    response = handler(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/rest_framework/mixins.py", line 47, in list 
    serializer = self.get_serializer(queryset, many=True) 
    File "/usr/local/lib/python2.7/dist-packages/rest_framework/generics.py", line 111, in get_serializer 
    return serializer_class(*args, **kwargs) 
TypeError: 'ReturnDict' object is not callable 

S'il vous plaît aider à comprendre et à résoudre cette erreur dans le cadre de repos django!

+0

Avez ma réponse vous aide? Si oui, acceptez-le. – ilse2005

Répondre

1

Votre FishViewSets comporte au moins deux problèmes.

  1. queryset devrait être un queryset (vous définissez une seule instance)

  2. serializer_class doit être une classe. Vous le définissez sur une instance sérialisée de votre sérialiseur.

Cela devrait aider:

class FishViewSets(viewsets.ModelViewSet): 
    queryset = Fish.objects.all() 
    serializer_class = FishSerializers