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)