Python 类型错误:';GeoQuerySet';对象不可调用
我正在尝试使用用户在Geodjango中的位置创建google map API 3标记 我在渲染谷歌地图和标记时遇到Python 类型错误:';GeoQuerySet';对象不可调用,python,django,geodjango,jsonresponse,Python,Django,Geodjango,Jsonresponse,我正在尝试使用用户在Geodjango中的位置创建google map API 3标记 我在渲染谷歌地图和标记时遇到内部服务器错误500。在CMD控制台上,我得到TypeError:“GeoQuerySet”对象不可调用 您能提出解决方案并解释异常的原因吗 视图.py class MyView(View): def get(self, request): resp = UserList.objects.all().values('nickname', 'last_loca
内部服务器错误500
。在CMD控制台上,我得到TypeError:“GeoQuerySet”对象不可调用
您能提出解决方案并解释异常的原因吗
视图.py
class MyView(View):
def get(self, request):
resp = UserList.objects.all().values('nickname', 'last_location')
print (resp)
return JsonResponse(request, resp, safe=False)
url.py
from django.conf.urls import include, url
from django.contrib import admin
from mymap_app import views as map_views
admin.autodiscover()
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^my_endpoint/$',map_views.MyView.as_view(),name='user_list'),
url(r'^$',map_views.IndexView.as_view(), name='index'),
]
回溯:
Traceback (most recent call last):
File "C:\Python35-32\lib\site-packages\django\core\handlers\exception.py", lin
e 41, in inner
response = get_response(request)
File "C:\Python35-32\lib\site-packages\django\core\handlers\base.py", line 187
, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Python35-32\lib\site-packages\django\core\handlers\base.py", line 185
, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python35-32\lib\site-packages\django\views\generic\base.py", line 68,
in view
return self.dispatch(request, *args, **kwargs)
File "C:\Python35-32\lib\site-packages\django\views\generic\base.py", line 88,
in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\Kaleab\Desktop\WebMap\AAmap_Project\mymap_app\views.py", line 2
1, in get
return JsonResponse(request, resp, safe=False)
File "C:\Python35-32\lib\site-packages\django\http\response.py", line 530, in
__init__
data = json.dumps(data, cls=encoder, **json_dumps_params)
File "C:\Python35-32\lib\json\__init__.py", line 237, in dumps
**kw).encode(obj)
TypeError: 'GeoQuerySet' object is not callable
[05/Sep/2017 22:36:45] "GET /my_endpoint/ HTTP/1.1" 500 18865
看看这个:
data=json.dumps(数据,cls=encoder,**json\u dumps\u参数)
JsonResponse正在尝试序列化您传递给它的参数,但GeoQuerySet不能通过函数调用序列化,因此会抛出TypeError。请参阅以下文档:
如果skipkeys为true(默认值:False),则表示不属于
基本类型(str、unicode、int、long、float、bool、None)将为
跳过而不是引发类型错误
为了避免这种情况,您可以改为:
return HttpResponse(
json.dumps(response, skipkeys=True), content_type="application/json"
)
还可以将GeoQuerySet格式化为python字典,然后将其传递给JsonResponse。看看这个:
data=json.dumps(data,cls=encoder,**json\u dumps\u params)
JsonResponse正在尝试序列化您传递给它的参数,但GeoQuerySet不能通过函数调用序列化,因此会抛出TypeError。请参阅以下文档:
如果skipkeys为true(默认值:False),则表示不属于
基本类型(str、unicode、int、long、float、bool、None)将为
跳过而不是引发类型错误
为了避免这种情况,您可以改为:
return HttpResponse(
json.dumps(response, skipkeys=True), content_type="application/json"
)
还可以将GeoQuerySet格式化为python字典,然后将其传递给JsonResponse。对views.py的以下更改解决了
GeoQuerySet对象不可调用的错误
class MyView(View):
def get(self, request):
response = UserList.objects.all().values('nickname','last_location')
print(response)
return JsonResponse({'response':list(response)})
对views.py的以下更改解决了Geoqueryset对象不可调用的错误
class MyView(View):
def get(self, request):
response = UserList.objects.all().values('nickname','last_location')
print(response)
return JsonResponse({'response':list(response)})
@约翰·穆塔菲斯,谢谢你回复我。我有一系列的问题。json文件似乎加载得很好,只是我无法在映射上获得标记。我有一个建议,这可能是因为标记代码在映射加载后执行。另一个建议是json文件无效,其他所有内容都在运行。您可能会看到我的最新问题-“无法显示谷歌地图标记”。您在这里遇到的问题,尽管@Kaelab有不同的答案。。。你用任何答案解决了吗?@John Moutafis,谢谢你回复我。我有一系列的问题。json文件似乎加载得很好,只是我无法在映射上获得标记。我有一个建议,这可能是因为标记代码在映射加载后执行。另一个建议是json文件无效,其他所有内容都在运行。您可能会看到我的最新问题-“无法显示谷歌地图标记”。您在这里遇到的问题,尽管@Kaelab有不同的答案。。。你用任何一个答案解决了吗?