2016-04-18 81 views
2

我想从django服务器获取数据并获取此错误。AttributeError'元组'对象没有属性'值'django rest框架

Internal Server Error: /data/site-info/ 
Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/Library/Python/2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/Library/Python/2.7/site-packages/django/views/generic/base.py", line 68, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/rest_framework/views.py", line 466, in dispatch 
    response = self.handle_exception(exc) 
    File "/Library/Python/2.7/site-packages/rest_framework/views.py", line 463, in dispatch 
    response = handler(request, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/rest_framework/decorators.py", line 53, in handler 
    return func(*args, **kwargs) 
    File "/Users/hco/PycharmProjects/tool/linyit/data/views.py", line 17, in site_info 
    Response(serializer.data) 
    File "/Library/Python/2.7/site-packages/rest_framework/serializers.py", line 674, in data 
    ret = super(ListSerializer, self).data 
    File "/Library/Python/2.7/site-packages/rest_framework/serializers.py", line 239, in data 
    self._data = self.to_representation(self.instance) 
    File "/Library/Python/2.7/site-packages/rest_framework/serializers.py", line 614, in to_representation 
    self.child.to_representation(item) for item in iterable 
    File "/Library/Python/2.7/site-packages/rest_framework/serializers.py", line 459, in to_representation 
    fields = self._readable_fields 
    File "/Library/Python/2.7/site-packages/django/utils/functional.py", line 33, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/Library/Python/2.7/site-packages/rest_framework/serializers.py", line 353, in _readable_fields 
    field for field in self.fields.values() 
AttributeError: 'tuple' object has no attribute 'values' 

程序my_app/urls.py:

urlpatterns = [ 
    url(r'^site-info/$', site_info, name='site_info'), 
] 

程序my_app/models.py:

from __future__ import unicode_literals 

from django.db import models 

# Create your models here. 
class SiteInfo(models.Model): 
    site_id = models.IntegerField(primary_key=True) 
    site_name = models.CharField(max_length=100, blank=True, null=True) 
    latitude = models.DecimalField(max_digits=18, decimal_places=15, blank=True, null=True) 
    longitude = models.DecimalField(max_digits=18, decimal_places=15, blank=True, null=True) 

class Meta: 
    # managed = False 
    db_table = 'site_info' 

数据/视图:

from rest_framework.decorators import api_view 
from rest_framework.response import Response 

from .models import SiteInfo 
from .serializers import SiteInfoSerializer 


# Create your views here. 
@api_view(['GET', 'POST']) 
def site_info(request): 
""" 
    List all sites 
""" 
    if request.method == 'GET': 
     sites = SiteInfo.objects.using('teldata').all() 
     serializer = SiteInfoSerializer(sites, many=True) 
     Response(serializer.data) 

程序my_app /串行化器:

from rest_framework import serializers 

from .models import SiteInfo 


class SiteInfoSerializer(serializers.ModelSerializer): 
    model = SiteInfo 
    fields = ('site_id', 'site_name', 'latitude', 'longitude') 

可能是什么问题?感谢

+0

你'return'作为前缀'响应(serializer.data)'在你的视图上,对吧? – trinchet

+0

是的,你是对的,我不知道我怎么看不到它。对不起,这愚蠢misameke :( – hco

回答

10

你的序列化需要使用嵌套Meta类申报modelfields(你被他们声明为类的正常属性代替嵌套其中):

class SiteInfoSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = SiteInfo 
     fields = ('site_id', 'site_name', 'latitude', 'longitude') 
+1

感谢它解决了我的问题:)我做了一些其他的小错误,但它是主要问题,我猜 – hco

+0

当我看到这些Meta类时,我倾向于在Django中考虑形式。这是我提醒我把它放在元类中的奇怪方式。 – Encompass

相关问题