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

2024-09-29 21:53:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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时,它的特定多态类型丢失,因此没有足够的数据来重建我的原始子类:

^{pr2}$

与保存顶级文档时不同,文档的特定类的名称是数据库中集合的名称。在

我可以使BaseEmbedded成为DynamicEmbeddedDocument,为每个子类型添加一个具有适当值的“type”StringField,并根据类型字段重建列表元素对象。在

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


Tags: an类型列表documentlistclassint多态

热门问题