Mongoengine:如何在allow_inheritance时定义自定义集合名称

时间:2018-12-17 08:51:44

标签: python mongodb mongoengine

我想定义一个基本文档来定义一些公共文件和方法。 但是我发现子文档在继承时无法定义其自定义名称。 例如:

from mongoengine import *

class BaseInfo(Document):
    account = StringField()
    insert_time = IntField()
    update_time = IntField()
    meta = {'allow_inheritance': True}

class SonItem(Document, BaseItem):
   age = IntField()
   meta = {'collection': 'son_item'}
   meta = {'allow_inheritance': True}


class GrandItem(Document, BaseItem):
    age = IntField()
    meta = {'collection': 'grand_item'}

这将出现错误:

SyntaxWarning: Trying to set a collection on a subclass (SonItem)

1 个答案:

答案 0 :(得分:0)

如果您希望BaseInfo(不是BaseItem?)本质上是一个mixin类,则应按照docs here将其定义为abstract

class BaseItem(Document):
    account = StringField()
    insert_time = IntField()
    update_time = IntField()
    meta = {'abstract': True}

如果您使用allow_inheritance将类指定为基类,则假定子类将在同一集合中。这样,您可以使用基搜索对象,它也将正确检索所有子类。您不能跨集合执行此操作。