1

的Django抛出一个异常:restframework '元组' 对象有没有属性 '_meta'

restframework '元组' 对象有没有属性 '_meta'

型号

class BDetail(models.Model): 
    lat = models.FloatField(blank=True, null=True) 
    lng = models.FloatField(blank=True, null=True) 

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

查看

from .models import BDetail 
from .serializers import BDetailSerializer 
from rest_framework import viewsets 

class BDetailList(viewsets.ModelViewSet): 
     queryset = BDetail.objects.all() 
     serializer_class = BDetailSerializer 

网址

from django.conf.urls import url, include 
from bdetail import views 
from rest_framework import routers 

router = routers.DefaultRouter() 
router.register(r'bdetail', views.BDetailList) 

urlpatterns = [ 
    url(r'^', include(router.urls), name='bdetail') 
] 

串行

from .models import BDetail 
from rest_framework import serializers 

class BDetailSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = BDetail, 
     fields = ('lat', 'lng') 

环境:

请求方法:GET 请求URL:http://apiix.verinmuebles.dev/v1/bdetail/

回溯:

文件 “/无功/网络/ verinmuebles /电流/ ENV/API/local/lib目录/ python2.7 /网站-packages/django的 “在内部 39.响应= get_response(请求)

文件 ”/核心/处理器/ exception.py /无功/网络/ verinmuebles /电流/ ENV/API /本地/ LIB/python2 0.7 /站点包/ django的/核心/处理器/ base.py “ 在_get_response 187.响应= self.process_exception_by_middleware(E,请求)

文件 ”/无功/网络/ verinmuebles /电流/ env的/api/local/lib/python2.7/site-packages/django/core/handlers/base.py“ in _get_response 185. response = wrapped_callback(request,* callback_args,** callback_kwargs)

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/django/views/decorators/csrf.py” 在wrapped_view 58回view_func (*指定参数时,** kwargs)

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/viewsets.py” 鉴于 87. return self.dispatch(request,* args,** kwargs)

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-package S/rest_framework/views.py “ 在调度 474响应= self.handle_exception(EXC)

文件 ” /var/www/verinmuebles/current/Env/api/local/lib/python2.7/站点包/ rest_framework/views.py “ 在handle_exception 434 self.raise_uncaught_exception(EXC)

文件 ” /var/www/verinmuebles/current/Env/api/local/lib/python2.7/ site-packages/rest_framework/views.py“ in disatch 471。response = handler(request,* args,** kwargs)

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/mixins.py “ 列表 45回self.get_paginated_response(serializer.data)

文件 ” /var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/ serializers.py “在数据 701 RET =超级(ListSerializer,自我) 。数据

文件 ”/无功/网络/ verinmuebles/C urrent/ENV/API/local/lib目录/ python2.7 /站点包/ rest_framework/serializers.py “ 数据 240 self._data = self.to_representation(self.instance)

文件 ”/ var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py“ in to_representation 619. self.child.to_representation(item)for iterable

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py” 在to_representation 460字段= self._rea dable_fields

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/django/utils/functional.py” 在得到 35 RES =实例。 字典 [self.name] = self.func(实例)

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers py “为 在_readable_fields 354在self.fields.values场现场()

文件 ” /var/www/verinmuebles/current/Env/api/local/lib/python2.7/site- packages/rest_framework/serializers.py“ in fields 340. for key,value in self.get_fields()。items():

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py” in get_fields 946. info = model_meta.get_field_info(model)

文件 “/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/utils/model_meta.py” 在get_field_info 36. OPTS = model._meta .concrete_model._meta

异常类型:AttributeError的在/ V1/bdetail /异常值: '元组' 对象没有属性 '_meta'

回答

5

您在BDetailSerializer序列化程序中名称BDetail模型后面有,。删除并且你的代码将会工作。

建议:继承你的BDetailSerializer串行serializers.ModelSerializer而不是serializers.HyperlinkedModelSerializer即:

class BDetailSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = BDetail 
     fields = ('lat', 'lng') 
+0

引发相同的错误 –

+0

更新了答案。它不起作用,因为你在BDetailSerializer序列化程序中的'BDetail'模型的名字后面加上'',''。 –

+0

yes是“,”, –

2

只想添加其中,这样的事情可能发生潜在的情况。如果您使用的是get_or_create,请记住,此方法返回一个元组,而不仅仅是对象。

作为一个例子:

book = Book.objects.get_or_create(pk=123) 
serializer = BookSerializer(book, request.data) 
if serializer.is_valid(): 
    serializer.save() # <-- Right here you would get the same error 

问题是由拆包元组固定:

book, created = Book.objects.get_or_create(pk=123) 

# or this way if you do not need to know if it was created or not 
book, _ = Book.objects.get_or_create(pk=123)