首页 > 解决方案 > PyMODM 获取没有 _cls 的对象

问题描述

我有一个以前填充了没有_cls字段的文档的集合。

例如,现在我正在用这些类填充集合:

class SomeAnimal(MongoModel):
    ID = fields.CharField(primary_key=True, validators=[UUID])
    dob = fields.DateTimeField()

    class Meta:
        write_concern = WriteConcern(j=True)
        collection_name = COLLECTION_NAME


class Pet(Animal):
    name = fields.CharField(blank=True)

Pet.objects.all()仅返回从此脚本添加的文档(带有{'_cls':'Pet'}属性)。

是否可以使用 Pymodm 获取这些文档,或者这种情况破坏了使用 ORM 的所有感觉,最好切换到 pymongo?

标签: pythonmongodbpymodm

解决方案


来自文档:这是如何工作的?对于每个允许继承的模型类,pymodm 创建另一个名为 _cls 的隐藏字段,用于存储文档引用的模型的类。这样,不同类型的模型可以并置在同一个集合中,同时保留类型信息。

如果我们不希望这个 _cls 字段存储在我们的文档中怎么办?这可以通过将模型声明为最终模型来实现,这意味着它必须直接从 MongoModel 继承并且不能扩展:

class PageTheme(MongoModel):
    theme_name = fields.CharField()
    background_color = fields.CharField()
    foreground_color = fields.CharField()

    class Meta:
        final = True

推荐阅读