2017-09-05 6 views
1

Geodjango에서 사용자의 위치를 ​​사용하여 Google지도 API 3 마커를 만들려고합니다.TypeError : 'GeoQuerySet'개체를 호출 할 수 없습니다.

Google지도 및 마커 렌더링시 Internal Server Error 500이 발생합니다. CMD 콘솔에서 TypeError: 'GeoQuerySet' object is not callable을 얻습니다.

해결 방법을 제안하고 예외의 원인을 설명해 주실 수 있습니까?

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

@ 존 모타 피스, 저에게 다시 연락 주셔서 감사합니다. 나는 일련의 질문을했다. json 파일은지도에서 마커를 가져올 수 없다는 점을 제외하고는 정상적으로로드되는 것 같습니다.지도로드 후에 마커 코드가 실행 되었기 때문일 수 있습니다. 다른 하나는 json 파일이 유효하지 않으며 다른 모든 파일이 실행되었습니다. 내 최근 질문 인 "google map marker를 표시 할 수 없습니다"가 표시 될 수 있습니다. – 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를 포맷 한 다음에 통과 할 수있을 것입니다 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)})