【问题标题】:PyMODM get objects without _clsPyMODM 获取没有 _cls 的对象
【发布时间】:2020-11-17 15:17:32
【问题描述】:

我有一个以前填充了没有_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?

【问题讨论】:

    标签: python mongodb pymodm


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2015-11-01
      • 2018-05-22
      相关资源
      最近更新 更多