【问题标题】:How to add custom field to mongoengine model?如何将自定义字段添加到 mongoengine 模型?
【发布时间】:2013-08-08 10:49:32
【问题描述】:

我有一个项目模型如下:

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

有办法实现吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

    我认为您正在寻找的概念在 MongoDB 中称为 Database References

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

    【讨论】:

    • 这就是我想要避免的。我不想在模型中添加另一个字段,而是希望在引用项目实例时即时获取它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2014-04-02
      • 2012-07-29
      • 2021-07-24
      • 1970-01-01
      • 2022-11-28
      相关资源
      最近更新 更多