我有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对象的知识,但没有找到任何结果,这有助于我在这里找到解决方案。 提前谢谢。
答案 0 :(得分:0)
我在这里找到了解决方案。问题是,当我更新Elasticsearch时,传递作为Point对象的参数(因为该字段来自类型Location,我认为这是正确的方法),但实际上,我应该做的是传递一个json。以下是代码:
location = self.get_location()
location_es = "{0},{1}".format(location.y, location.x)
之后,当我更新Elasticsearch时,使用location_es,而不是location作为location字段的参数。 谢谢您的回答 ! :)