Mongoengine Django Rest框架 - 序列化程序错误 - ReferenceField不是JSON可序列化的

时间:2015-08-05 20:10:14

标签: django-rest-framework mongoengine

在ReferenceField的ObjectID值不再指向有效文档之前,一切正常。然后保留ObjectID作为值,json不知道如何序列化它。

如何处理无效的ReferenceFields?

E.g。

class Food(Document):
    name = StringField()
    owner = ReferenceField("Person")

class Person(Document):
    first_name = StringField()
    last_name = StringField()
    ...


p = Person(...)
apple = Food(name="apple", owner=p)
p.delete() # might be the wrong method, but you get the idea

此时,尝试通过REST API获取食物列表将因is not JSON serializable错误而失败,因为apple.owner不再指向存在的所有者。

1 个答案:

答案 0 :(得分:1)

由于您正在使用DRF和mongoengine,因此您必须使用django-rest-framework-mongoengine

实际上,它是django-rest-framework-mongoengine中的一个错误。检查最近报告的关于Github的这个未解决的问题。

https://github.com/umutbozkurt/django-rest-framework-mongoengine/issues/91

一种方法是为此编写自己的JSONEncoder。这link可能会有所帮助。

另一种选择是使用json_utilPymongo库。它们为json提供明确的BSON转换。

根据json-util文档:

  

这个模块提供了两个帮助方法dumpsloads   原生json方法并提供明确的BSON转换   JSON。这允许BSON的专门编码和解码   将文档转换为Mongo Extended JSON的严格模式。这可以让你编码   /将BSON文档解码为JSON,即使它们使用特殊的BSON类型。