ReturnDict 对象不可调用 Django Rest Framework



我是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中至少有两个问题。

  1. queryset应该是queryset(您设置单个实例)

  2. serializer_class必须是一个类。将其设置为序列化程序的序列化实例。

这应该会有所帮助:

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

最新更新