<point object =“”at =“”xxx =“”>不是JSON可序列化的</point>

时间:2014-03-04 13:57:00

标签: python json django django-haystack

我有Django 1.6,Python 3.3和haystack的以下问题。基本上我正在尝试在大海捞针中使用LocationField,但遗憾的是不是很成功。

这是一个例外,它是python trow。

<Point object at 0x7fe54e41d9a0> is not JSON serializable

我的代码在search_indexes.py:

class ListingIndex(indexes.SearchIndex, indexes.Indexable):
    ....
    location = indexes.LocationField(model_attr='get_location')
    ....

    def get_model(self):
        return Listing

在models.py()中:

...
from haystack.utils.geo import Point
...

class Listings(models.Model):
    ...
    def get_location(self):
        return Point(self.lng, self.lat)

我已经在Google和SO中搜索了几个小时,并且学习了很多关于序列化Django对象的知识,但没有找到任何结果,这有助于我在这里找到解决方案。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我在这里找到了解决方案。问题是,当我更新Elasticsearch时,传递作为Point对象的参数(因为该字段来自类型Location,我认为这是正确的方法),但实际上,我应该做的是传递一个json。以下是代码:

location = self.get_location()
location_es = "{0},{1}".format(location.y, location.x)

之后,当我更新Elasticsearch时,使用location_es,而不是location作为location字段的参数。 谢谢您的回答 ! :)