在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
不再指向存在的所有者。
答案 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_util
的Pymongo
库。它们为json提供明确的BSON转换。
根据json-util
文档:
这个模块提供了两个帮助方法
dumps
和loads
原生json方法并提供明确的BSON转换 JSON。这允许BSON的专门编码和解码 将文档转换为Mongo Extended JSON的严格模式。这可以让你编码 /将BSON文档解码为JSON,即使它们使用特殊的BSON类型。