Я работаю над простым приложением для движка приложений, которое использует гео-поиск бесконтактный поиск
Я выполняю поиск и некоторую дополнительную фильтрацию данных, и все идет хорошо (я проверил количество возвращаемых результатов, и это было так, как ожидалось). Однако, когда я попытался вывести его в json, используя простой json, Я получил следующую ошибку:
TypeError: <объект backend.models.Listing в 0x0570CC90> не является сериализуемым JSON
Это способ определения объекта в моем коде:
class Listing(GeoModel):
currency=db.IntegerProperty( default = CURRENCY["EURO"] )
title=db.StringProperty(required = True )
admins = db.ReferenceProperty( User )
.
. Some uninteresting properties goes here, Only Integer and String Properties
.
active = db.BooleanProperty()
@staticmethod
def get_listing_from_point( lat , lon ,
max_dist=MAX_SEARCH_RADIUS,
max_result=MAX_SEARCH_RESULT,
start_date=None,end_date=None):
rich_query = Listing.all()
result = Listing.proximity_fetch( rich_query ,
geo.geotypes.Point( lat , lon ),
max_results = max_result,
max_distance = max_dist )
result = list( rich_query )
valid_list =
[i for i in list( result ) if i.check_availability( start_date ,
end_date )]
return valid_list
И это метод, из которого я называю поиск близости:
lon = self.request.args.get("lon" , None)
lat = self.request.args.get("lat" , None)
check_in = self.request.args.get("check_in" , None)
check_out = self.request.args.get("check_out" , None)
if not lon or not lat:
return Response( json.dumps( "{ 'error' : 'desription..." ) )
result = Listing.get_listing_from_point(
lat = float(lat),
lon = float(lon),
start_date = check_in,
end_date = check_out)
return json.dumps( result )
Пытаясь найти причину проблемы, я пытался вернуть dict первого результата поиска, и когда я это сделал, я получил следующую ошибку:
TypeError: datastore_types.GeoPt (23.0, 42.2) не поддерживает сериализацию в формате JSON
Что заставляет меня верить, что в том, как я справляюсь со своими географическими точками, что-то не так ...
Я пытался найти обе ошибки безрезультатно, какие-либо подсказки?
P.S, это полная трассировка стека:
Файл "C: \ Program> Files \ Google \ google_appengine \ google \ appengine \ ext \ appstats \ recording.py", строка 897, в> appstats_wsgi_wrapper
результат = приложение (environment, appstats_start_response)
Файл "C: \ Users \ roi.SEMANTV \ PycharmProjects \ gayville_tipfy \ tipfy \ app.py", строка 245, в> отправке
rv = self.handle_exception (запрос, e)
Файл "C: \ Users \ roi.SEMANTV \ PycharmProjects \ gayville_tipfy \ tipfy \ app.py", строка 241, в> отправке
rv = self.router.dispatch (запрос)
Файл "C: \ Users \ roi.SEMANTV \ PycharmProjects \ gayville_tipfy \ tipfy \ routing.py", строка 105, в> отправке
rv = rv ()
Файл "C: \ Users \ roi.SEMANTV \ PycharmProjects \ gayville_tipfy \ tipfy \ handler.py", строка 297, в> , вызов
response = self.dispatch ()
Файл "C: \ Users \ roi.SEMANTV \ PycharmProjects \ gayville_tipfy \ tipfy \ handler.py", строка 88, в> отправке
вернуть self.handle_exception (исключение = e)
Файл "C: \ Users \ roi.SEMANTV \ PycharmProjects \ gayville_tipfy \ tipfy \ handler.py", строка 86, в> отправке
вернуть self.make_response (метод (** request.rule_args))
Файл "C: \ Users \ roi.SEMANTV \ PycharmProjects \ gayville_tipfy \ backend \ handlers.py", строка 47,> в get
возврат json.dumps (результат)
Файл "C: \ Program> Files \ Google \ google_appengine \ lib \ django_0_96 \ django \ utils \ simplejson__init __. Py", строка> 182, в дампах
** кВт) .encode (объект)
Файл "C: \ Program> Files \ Google \ google_appengine \ lib \ django_0_96 \ django \ utils \ simplejson \ encoder.py", строка> 312, в кодировке
chunks = list (self.iterencode (o))
Файл "C: \ Program> Files \ Google \ google_appengine \ lib \ django_0_96 \ django \ utils \ simplejson \ encoder.py", строка> 262, в _iterencode
для чанка в self._iterencode_list (o, маркеры):
Файл "C: \ Program> Files \ Google \ google_appengine \ lib \ django_0_96 \ django \ utils \ simplejson \ encoder.py", строка> 170, в _iterencode_list
для чанка в self._iterencode (значение, маркеры):
Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django_0_96 \ django \ utils \ simplejson \ encoder.py", строка 273, в _iterencode
для чанка в self._iterencode_default (o, маркеры):
Файл "C: \ Program> Files \ Google \ google_appengine \ lib \ django_0_96 \ django \ utils \ simplejson \ encoder.py", строка 279, в _iterencode_default
newobj = self.default (o)
Файл "C: \ Program> Files \ Google \ google_appengine \ lib \ django_0_96 \ django \ utils \ simplejson \ encoder.py", строка> 300, по умолчанию
поднять TypeError («% r не является сериализуемым JSON»% (o,))