Mongoengine to_json确实将ReferenceField转换为OID

Ale*_*.P. 2 python mongoengine

如果model包含ListField(db.ReferenceField))并且在查询名为to_json()ir 之后不将子转换为json,则将其保留为OID.有没有办法轻松地将(至少到X深层次)孩子转换为json?

"data": {
 "articles": [],
 "category": {
  "_id": {
    "$oid": "5224905453f0462f5458a724"
  },
  "children": [
    {
      "$oid": "5224905453f0462f5458a725"
    },
    {
      "$oid": "5224905453f0462f5458a726"
    },
    {
      "$oid": "5224905453f0462f5458a727"
    },
    {
      "$oid": "5224905453f0462f5458a728"
    }
  ],
...........
Run Code Online (Sandbox Code Playgroud)

use*_*730 8

而不是to_json()(你可以在文档中覆盖to_json),使用to_mongo()来获取一个SON对象,然后更新SON对象字段(就像一个dict对象),对于每个referencefield项,用item.to_mongo替换它们( ),最后返回bson.json_util.dumps(SON obj).

#override
def to_json(self):
   data = self.to_mongo()
   for i in range(len(data['children'])):
        data['children'][i]= self.children[i].to_mongo()
   return bson.json_util.dumps(data)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你这个好答案.我在这个答案http://stackoverflow.com/a/23990828/3073422中将它与CustomQuerySet类结合起来,以获得适用于查询集的解决方案.还要注意它应该是`def to_json(self):` (3认同)