如何为mongoengine模型添加自定义字段?

时间:2013-08-08 10:49:33

标签: python mongodb mongoengine

我有一个项目模型如下:

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信息。

有没有办法实现它?

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

我认为你所寻找的概念在MongoDB中被称为Database References

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

答案 1 :(得分:0)

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