我有这样的方法,并想以Json的形式返回,但它写道Posts对象不是Json可序列化的:
def show_results_async(text):
query = { '$or':[{'title':{'$regex':text}},{'author':{'$regex':text}} ]}
posts = Posts.objects(__raw__=(query))
return jsonify(result = posts)发布于 2012-12-25 04:45:40
tl,dr:没有将MongoEngine文档转换为JSON的内置函数。因此,您需要编写自己的代码。
在views.py中:
def show_results_async(text):
query = { '$or':[{'title':{'$regex':text}},{'author':{'$regex':text}} ]}
posts = Posts.objects(__raw__=(query))
return jsonify(result=posts.to_dict())在post.py中,添加:
def to_dict(self):
return helper.mongo_to_dict(self)在helper.py中:
def mongo_to_dict(obj):
return_data = []
if isinstance(obj, Document):
return_data.append(("id",str(obj.id)))
for field_name in obj._fields:
if field_name in ("id",):
continue
data = obj._data[field_name]
if isinstance(obj._fields[field_name], DateTimeField):
return_data.append((field_name, str(data.isoformat())))
elif isinstance(obj._fields[field_name], StringField):
return_data.append((field_name, str(data)))
elif isinstance(obj._fields[field_name], FloatField):
return_data.append((field_name, float(data)))
elif isinstance(obj._fields[field_name], IntField):
return_data.append((field_name, int(data)))
elif isinstance(obj._fields[field_name], ListField):
return_data.append((field_name, data))
elif isinstance(obj._fields[field_name], EmbeddedDocumentField):
return_data.append((field_name, mongo_to_dict(data)))
return dict(return_data)以下是几个注意事项:
发布于 2013-10-25 21:48:47
您可以使用mongoengine内置方法: to_json()。上面的例子,你可以像这样使用:
def show_results_async(text):
query = { '$or':[{'title':{'$regex':text}},{'author':{'$regex':text}} ]}
posts = Posts.objects(__raw__=(query))
return jsonify(result = posts.to_json())发布于 2015-12-12 04:51:38
这是可行的,尽管我不知道这是否是最有效的方式:
import json
@app.route('/api/my-objects/')
def get_objects():
all_objects = [json.loads(o.to_json()) for o in MyObject.objects]
return jsonify({"my_objects": all_objects})https://stackoverflow.com/questions/14003103
复制相似问题