cri*_*ego 4 python django python-2.7 django-rest-framework django-rest-framework-gis
Django引发了下一个异常:
restframework'tuple'对象没有属性'_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'
Run Code Online (Sandbox Code Playgroud)
视图
from .models import BDetail
from .serializers import BDetailSerializer
from rest_framework import viewsets
class BDetailList(viewsets.ModelViewSet):
queryset = BDetail.objects.all()
serializer_class = BDetailSerializer
Run Code Online (Sandbox Code Playgroud)
网址
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')
]
Run Code Online (Sandbox Code Playgroud)
串行
from .models import BDetail
from rest_framework import serializers
class BDetailSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = BDetail,
fields = ('lat', 'lng')
Run Code Online (Sandbox Code Playgroud)
环境:
请求方法:GET请求URL:http://apiix.verinmuebles.dev/v1/bdetail/
追溯:
文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/django/core/handlers/exception.py"在内部39. response = get_response(request)
文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/django/core/handlers/base.py"在_get_response 187. response = self.process_exception_by_middleware(e,request )
_get_response中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/django/core/handlers/base.py"185. response = wrapped_callback(request,*callback_args,**callback_kwargs)
在wrapped_view 58中输入文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/django/views/decorators/csrf.py".返回view_func(*args,**kwargs )
在视图87中输入文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/viewsets.py".返回self.dispatch(request,*args,**kwargs )
发送474中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/views.py".response = self.handle_exception(exc)
handle_exception中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/views.py"434.self.raise_uncaught_exception(exc)
发送471中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/views.py".response = handler(request,*args,**kwargs)
列表45中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/mixins.py"返回self.get_paginated_response(serializer.data)
数据701中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py".ret = super(ListSerializer,self).data
在数据240中输入文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py".self._data = self.to_representation(self.instance)
to_representation 619中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py".可迭代项目的self.child.to_representation(item)
在to_representation 460中输入文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py".fields = self._readable_fields
在get 35. res = instance中输入文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/django/utils/functional.py" .dict [self.name] = self.func(instance)
文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py"在_readable_fields 354.字段中为self.fields.values()中的字段
在字段340中输入文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py".对于self.get_fields().中的键值,项目( ):
get_fields 946中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/serializers.py".info = model_meta.get_field_info(model)
get_field_info中的文件"/var/www/verinmuebles/current/Env/api/local/lib/python2.7/site-packages/rest_framework/utils/model_meta.py"36. opts = model._meta.concrete_model._meta
异常类型:/ v1/bdetail/Exception中的AttributeError值:'tuple'对象没有属性'_meta'
Moi*_*dri 10
您正在使用序列化程序中,的BDetail模型名称BDetailSerializer.删除它,你的代码将工作.
建议:serializers.ModelSerializer在BDetailSerializer序列化程序中继承而不是serializers.HyperlinkedModelSerializerie:
class BDetailSerializer(serializers.ModelSerializer):
class Meta:
model = BDetail
fields = ('lat', 'lng')
Run Code Online (Sandbox Code Playgroud)
只是想添加一个可能发生这种情况的潜在案例。如果使用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
Run Code Online (Sandbox Code Playgroud)
通过拆开元组可解决此问题:
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)
Run Code Online (Sandbox Code Playgroud)