2017-09-05 111 views
1

我正在使用用户在Geodjango中的位置创建Google地图API 3标记。我在Internal Server Error 500中遇到了google map和marker。在CMD控制台上,我得到TypeError: 'GeoQuerySet' object is not callableTypeError:'GeoQuerySet'对象不可调用

能否请您提出解决方案并解释异常的原因?

views.py

class MyView(View): 
    def get(self, request): 
     resp = UserList.objects.all().values('nickname', 'last_location') 
     print (resp) 
     return JsonResponse(request, resp, safe=False) 

urls.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 
+0

@John Moutafis,谢谢你回到我身边。我有一系列的问题。 JSON文件似乎加载得很好,除了我无法获得地图上的标记。我有一个建议,这可能是因为标记代码在地图加载后执行。另一个建议json文件无效,其他一切运行。你可能会看到我的最新问题 - “无法显示谷歌地图标记”。 – Kaleab

+0

虽然@Kaelab有一个不同的答案,你在这里的问题...你解决任何答案吗? –

回答

0

看看这个:data = json.dumps(data, cls=encoder, **json_dumps_params)

JsonResponse试图序列化你传递它的参数,但是一个GeoQuerySet不能被该函数调用序列化,因此抛出一个TypeError。请参见下面的文档: https://docs.python.org/2/library/json.html

If skipkeys is true (default: False), then dictionary keys that are not of a basic type (str, unicode, int, long, float, bool, None) will be skipped instead of raising a TypeError.

为了解决这个问题,你可以改为做:

return HttpResponse(
    json.dumps(response, skipkeys=True), content_type="application/json" 
) 

这也将有可能在GeoQuerySet格式化为一个Python字典,然后把它传递给JsonResponse。

0

以下更改为views.py解决了Geoqueryset object not callable错误。

class MyView(View): 
    def get(self, request): 
     response = UserList.objects.all().values('nickname','last_location') 
     print(response) 
     return JsonResponse({'response':list(response)})