Python Django Rest框架-If表包含响应数据,显示服务器错误(500)

Python Django Rest框架-If表包含响应数据,显示服务器错误(500),python,django,django-rest-framework,django-1.10,Python,Django,Django Rest Framework,Django 1.10,我正在为RESTAPI使用DjangoRestFramework 在get请求中 如果表中没有数据,则响应显示为空。 如果表中有数据,响应将显示空服务器错误(500) 下面是我的代码 models.py from __future__ import unicode_literals from django.db import models # Create your models here. class Employee(models.Model): name = models.Cha

我正在为RESTAPI使用DjangoRestFramework

在get请求中 如果表中没有数据,则响应显示为空。 如果表中有数据,响应将显示空服务器错误(500)

下面是我的代码

models.py

from __future__ import unicode_literals
from django.db import models

# Create your models here.
class Employee(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=200)
序列化程序.py

from rest_framework import serializers
from firstexample.models import Employee

class employeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = ('name', 'address')
views.py

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework import viewsets
from firstexample.models import Employee
from firstexample.serializers import employeeSerializer
# Create your views here.


class employeeList(APIView):

    def get(self, request, format=None):
        employees = Employee.objects.all()
        serializer = employeeSerializer(employees, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = employeeSerializer(data=request.data)
        print(request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
url.py

from django.conf.urls import url
from django.contrib import admin
from firstexample import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^employeesList/$', views.employeeList.as_view()),
]
谁能帮我一下吗。我花了更多的时间在这个问题上,但我没有弄清楚问题所在

提前谢谢

错误代码

Performing system checks...

System check identified no issues (0 silenced).
December 05, 2015 - 07:50:03
Django version 1.10.dev20151112003354, using settings 'helloworld.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
<QuerySet [<Employee: Employee object>]>
Internal Server Error: /employeesList/
Traceback (most recent call last):
  File "/Users/jaikakkar/Desktop/Python/django/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/jaikakkar/Desktop/Python/django/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/jaikakkar/Desktop/Python/django/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/jaikakkar/Desktop/Python/django/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/views.py", line 466, in dispatch
    response = self.handle_exception(exc)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/views.py", line 463, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/jaikakkar/Desktop/pythonlearning/helloworld/firstexample/views.py", line 17, in get
    print(serializer.data)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/serializers.py", line 674, in data
    ret = super(ListSerializer, self).data
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/serializers.py", line 239, in data
    self._data = self.to_representation(self.instance)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/serializers.py", line 614, in to_representation
    self.child.to_representation(item) for item in iterable
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/serializers.py", line 459, in to_representation
    fields = self._readable_fields
  File "/Users/jaikakkar/Desktop/Python/django/django/utils/functional.py", line 33, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/serializers.py", line 353, in _readable_fields
    field for field in self.fields.values()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/serializers.py", line 339, in fields
    for key, value in self.get_fields().items():
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/serializers.py", line 918, in get_fields
    info = model_meta.get_field_info(model)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/utils/model_meta.py", line 69, in get_field_info
    reverse_relations = _get_reverse_relationships(opts)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rest_framework/utils/model_meta.py", line 137, in _get_reverse_relationships
    for relation in opts.get_all_related_objects():
AttributeError: 'Options' object has no attribute 'get_all_related_objects'
[05/Dec/2015 07:50:04] "GET /employeesList/ HTTP/1.1" 500 114115
正在执行系统检查。。。
系统检查未发现任何问题(0静音)。
2015年12月5日-07:50:03
Django版本1.10.dev2015112003354,使用设置“helloworld.settings”
正在启动开发服务器http://127.0.0.1:8000/
使用CONTROL-C退出服务器。
内部服务器错误:/employeesList/
回溯(最近一次呼叫最后一次):
文件“/Users/jaikkar/Desktop/Python/django/django/core/handlers/base.py”,第149行,在get_响应中
response=self.process\u异常\u由\u中间件(e,请求)
文件“/Users/jaikkar/Desktop/Python/django/django/core/handlers/base.py”,第147行,在get_响应中
响应=包装的回调(请求,*回调参数,**回调参数)
文件“/Users/jaikkar/Desktop/Python/django/django/views/decorators/csrf.py”,第58行,在包装视图中
返回视图函数(*args,**kwargs)
文件“/Users/jaikkar/Desktop/Python/django/django/views/generic/base.py”,第68行,在视图中
返回自调度(请求,*args,**kwargs)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest_framework/views.py”,第466行,已发送
响应=自身处理异常(exc)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest_framework/views.py”,第463行,已发送
响应=处理程序(请求、*args、**kwargs)
文件“/Users/jaikakar/Desktop/pythonlearning/helloworld/firstexample/views.py”,get中第17行
打印(serializer.data)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest_framework/serializers.py”,第674行,数据格式
ret=super(ListSerializer,self).data
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest_framework/serializers.py”,第239行,数据格式
self.\u data=self.to\u表示(self.instance)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest\u framework/serializers.py”,第614行,以to\u表示
iterable中项的self.child.to_表示(项)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest\u framework/serializers.py”,第459行,以to\u表示
字段=自可读字段
文件“/Users/jaikkar/Desktop/Python/django/django/utils/functional.py”,第33行,在__
res=instance.\uuuu dict\uuuu[self.name]=self.func(实例)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest\u framework/serializers.py”,第353行,在可读字段中
self.fields.values()中字段对应的字段
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest_framework/serializers.py”,第339行,在字段中
对于键,self.get_字段()中的值。项()
get_字段中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest_framework/serializers.py”,第918行
info=模型\元。获取\字段\信息(模型)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest\u framework/utils/model\u meta.py”,第69行,在get\u字段\u info中
反向关系=\u获取\u反向关系(opts)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/rest\u framework/utils/model\u meta.py”,第137行,在“get\u reverse\u”关系中
对于选项中的关系。获取所有相关对象():
AttributeError:“选项”对象没有属性“获取所有相关对象”
[2015年12月5日07:50:04]“GET/employeesList/HTTP/1.1”500 114115

DRF版本3+不适用于Django 1.1(在上面的stacktrace中),它需要Django 1.7+。升级到Django的最新版本,并从视图中的
.get()
方法中删除
format=None

为什么在使用序列化程序时使用
format=None
?尝试从您的
get
中删除
format=None
,看看它是如何工作的。感谢您的回复。Removed format=None,但仍然收到相同的错误。控制台堆栈跟踪中有什么?在config中设置debug=True并向我们显示详细信息SDRF需要django 1.7+您的另一个潜在问题是库的位置-DRF位于/Library中,django位于/Desktop/Python/。。。(在第一种情况下,混合使用sudo进行安装)。我建议您在某个时候注意这一点-坚持使用brew/pip,不要使用sudo安装。这里有一个很好的例子:我用django1.9和drf3.3.1创建了vertual环境,现在请求和响应工作得很好,非常感谢您的帮助。我认为问题还在于Drf位于/Library中,Django位于/desktop/Python中,您在评论中提到了这一点。