如何让参考字段接受 MongoEngine 中的多个文档模式?

How to let a Reference Field accept multiple Document schemas in MongoEngine?

上下文:我正在编写一个 API(使用 Flask 和 MongoEngine),其中包含多种帐户类型,可能包括建筑物。我需要数据库来保存一些临时帐户,直到特定建筑物注册为止。

这就是我只引用一种类型的用户的方式:

current_holder_of_stuff = ReferenceField(ActiveUser)

我知道 GenericReferenceField 也是一个选项,但如果我只想允许两种类型的引用怎么办?有没有类似的:

current_holder_of_stuff = ReferenceField(ActiveUser, TempUser)

非常感谢!

创建 User 类型的父 class,然后是 ActiveUserTempUserhave inherited classes 来处理各种用户类型可能会奏效.至于要求 current_holder_of_stuff 是两种可能的文档类型,你不能使用单一的参考字段。由于您已经拒绝使用 GenericReferenceField,因此一种方法可能是添加一个 属性 方法和一个 StringField,并带有如下选项:

import mongoegine as mdb

class User(mdb.Document):
    name = mdb.StringField()

    meta = {'allow_inheritance': True}

class ActiveUser(User):
    activation_date = mdb.DateTimeField()

class TempUser(User):
    date_limit = mdb.DateTimeField()

class Building(mdb.Document):
    address = mdb.StringField()

class Stuff(mdb.Document):
    user = mdb.ReferenceField(User)
    building = mdb.ReferenceField(Building)
    currently_with = mdb.StringField(options=['user','building'],required=True)

    @property
    def current_holder_of_stuff(self):
        if self.currently_with == "user":
            return self.user
        else:
            return self.building    

您还可以使用 mongoengine 的 signals 执行预保存检查,以确保只定义了用户或建筑物。