1

我有一个项目模型如下:

class Project(me.Document):
    title = me.StringField(max_length=64, required=True, unique=True)
    start_date = me.DateTimeField(default=datetime.utcnow())
    end_date = me.DateTimeField(default=datetime.utcnow())
    duration = me.IntField() #  sprint duration
    sequence = me.IntField()

    def __init__(self, *args, **values):
        super(Project, self).__init__( *args, **values)

    def __str__(self):
        return self.title

     def get_current_sprint(self):
         ''' A logic here to calculate the current sprint.'''

还有另一个模型冲刺:

class Sprint(me.Document):
    start_date = me.DateTimeField()
    end_date = me.DateTimeField()
    sequence = me.IntField(required=True, default=0, unique_with='project')
    project = me.ReferenceField('Project')

如果我有project实例,那么我可以通过调用该方法来获得当前的 sprint

project.get_current_sprint()

但我想要的是;每当查询项目对象时,而不是调用方法来获取当前 sprint,它应该有一个project.current_sprint具有当前 sprint 信息的属性。

有没有办法实现它?

任何帮助将非常感激。

4

2 回答 2

0

我认为您正在寻找的概念称为MongoDB 中的数据库引用

在 MongoEngine 中,您可能会在您的项目模型中创建一个ReferenceField,它将引用一个 Sprint 文档。

于 2013-08-11T07:43:49.223 回答
0

我正在尝试实现类似的目标,虽然我不知道完整的答案,但我会发布我已经确定的内容。您可能想要做的事情大概应该由查询集(您可以通过 访问Project.objects)启用。Mongoengine 创建了一个,但允许您替换它,这样当您获得 ( Project.objects.get(...)) 时,它可能会“预取”与该项目相关的 sprint。如何做到这一点可能是通过我还不熟悉的mongoengine 查询语法。最后,您可能必须结合属性和缓存来实现您想要的。查询的项目将具有对 sprint 的动态引用(例如project.sprint),并且您可以拥有一个属性Project来检查此数据是否存在(如果不存在,则查询它)。

于 2021-05-05T09:46:36.500 回答