我是SO和Django DRF的新手。每当我尝试运行代码时。我收到错误"类型错误返回字典对象不可调用"。
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
请帮助理解和解决 django rest 框架中的此错误!
您的FishViewSets
中至少有两个问题。
-
queryset
应该是queryset
(您设置单个实例) -
serializer_class
必须是一个类。将其设置为序列化程序的序列化实例。
这应该会有所帮助:
class FishViewSets(viewsets.ModelViewSet):
queryset = Fish.objects.all()
serializer_class = FishSerializers