【问题标题】:ReturnDict object not callable Django Rest FrameworkReturnDict 对象不可调用 Django Rest Framework
【发布时间】:2016-06-30 06:24:00
【问题描述】:

我是 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')

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框架中的这个错误!

【问题讨论】:

  • 我的回答对您有帮助吗?如果是,请接受。

标签: python django python-2.7 python-3.x django-rest-framework


【解决方案1】:

你的FishViewSets至少有两个问题。

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

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

这应该会有所帮助:

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

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    相关资源
    最近更新 更多