Skip to main content
 首页 » 编程设计

python之ReturnDict 对象不可调用 Django Rest Framework

2025年04月02日48think

我是 SO 和 Django DRF 的新手。 每当我尝试运行代码时。我收到错误“TypeError ReturnDict 对象不可调用”。

模型.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() 

序列化器.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') 

View .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 

网址.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')) 
] 

错误跟踪

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