我有一个项目模型如下:
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
个实例,那么我可以通过将方法调用为
project.get_current_sprint()
但我想要的是什么;无论何时查询项目对象,而不是调用方法来获取当前sprint,它都应该有一个属性project.current_sprint
,其中包含当前的sprint信息。
有没有办法实现它?
任何帮助都会非常感激。
答案 0 :(得分:0)
我认为你所寻找的概念在MongoDB中被称为Database References。
在MongoEngine中,您可能会在Project模型中创建一个ReferenceField,它将引用Sprint文档。
答案 1 :(得分:0)
我正在尝试实现类似的目标,虽然我不知道完整的答案,但我会发布我所确定的内容。您可能想要完成的事情应该由查询集启用(您可以通过 Project.objects
访问)。 Mongoengine 创建了一个,但允许您替换它,例如,当您获得 (Project.objects.get(...)
) 时,它可能会“预取”与该项目相关的冲刺。如何做到这一点可能是通过 mongoengine
query 语法,我还不熟悉。
最后,您可能必须结合属性和缓存来实现您想要的。被查询的项目将有一个对冲刺的动态引用(比如 project.sprint
),你可以在 Project
上有一个属性来检查这个数据是否存在(如果不存在,查询它)。