首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在MongoEngine中保存和加载多态类型的异构列表吗?

我可以在MongoEngine中保存和加载多态类型的异构列表吗?
EN

Stack Overflow用户
提问于 2015-05-13 10:21:36
回答 1查看 292关注 0票数 0

我希望在MongoEngine中保存和加载多态类型的异构列表。我理想中想要的是:

代码语言:javascript
复制
from mongoengine import Document, EmbeddedDocument, IntField, StringField
class BaseEmbedded(EmbeddedDocument):
    meta = {'abstract': True}
class FooEmbedded(BaseEmbedded):
    an_int = IntField()
class BarEmbedded(BaseEmbedded):
    a_string = StringField()
class HasList(Document):
    heterogeneous_list = ListField(EmbeddedDocumentField(BaseEmbedded))
has_list = HasList()
has_list.heterogeneous_list = [FooEmbedded(an_int=3), BarEmbedded(a_string='bar')]
has_list.save()
HasList.objects(id=has_list.id)

问题是在保存EmbeddedDocument时,它的特定多态类型丢失了,因此没有足够的数据来重构我原来的子类:

代码语言:javascript
复制
[{"an_int":3}, {"a_string":"bar"}]

与保存顶级文档不同,其中文档的特定类的名称是DB中集合的名称。

我可以使BaseEmbedded成为一个DynamicEmbeddedDocument,为每个子类型添加一个具有适当值的“type”StringField,并基于类型字段重构list元素对象。

有没有更好的解决办法我没有想到?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-13 16:47:04

将JSON映射到类是Mongoengine所做的工作,也是嵌入式文档所支持的。您需要在嵌入文档的元中设置allow_inheritance=True。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30212006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档