当前位置:  开发笔记 > 编程语言 > 正文

Document中的Mongoengine creation_time属性

如何解决《Document中的Mongoenginecreation_time属性》经验,为你挑选了3个好方法。

我正在尝试creation_time向我的文档添加属性.以下是一个例子:

import datetime

class MyModel(mongoengine.Document):
    creation_date = mongo.DateTimeField()
    modified_date = mongo.DateTimeField(default=datetime.datetime.now)

Django模型为它们的DateTimeField对象构建了参数,例如add_now,等等,但是MongoEngine不支持这个.

我想知道这样做的最佳方法如下:

m,created = MyModel.objects.get_or_create()
if created:
    m.creation_date = datetime.datetime.now()

或者如果有更好,更好的方式.



1> Willian..:

您可以覆盖save方法.

class MyModel(mongoengine.Document):
    creation_date = mongo.DateTimeField()
    modified_date = mongo.DateTimeField(default=datetime.datetime.now)

    def save(self, *args, **kwargs):
        if not self.creation_date:
            self.creation_date = datetime.datetime.now()
        self.modified_date = datetime.datetime.now()
        return super(MyModel, self).save(*args, **kwargs)



2> Ben Hughes..:

另外,创建时间标记在_id属性中 - 如果您这样做:

YourObject.id.generation_time

会给你一个日期时间戳.


这比接受的答案要好.我在这样的函数上使用`@ property`来获取created_time:`def created_at(self):如果self.id,则返回self.id.generation_time无

3> 小智..:

一个不错的解决方案是将单个信号处理程序重新用于多个文档。

class User(Document):
    # other fields...
    created_at = DateTimeField(required=True, default=datetime.utcnow)
    updated_at = DateTimeField(required=True)

class Post(Document):
    # other fields...
    created_at = DateTimeField(required=True, default=datetime.utcnow)
    updated_at = DateTimeField(required=True)

def update_timestamp(sender, document, **kwargs):
    document.updated_at = datetime.utcnow()

signals.pre_save.connect(update_timestamp, sender=User)
signals.pre_save.connect(update_timestamp, sender=Post)

请小心分配可调用而不是固定值作为默认值,例如, default=datetime.utcnow不带()。此页面上的其他一些答案不正确,可能会导致created_at新文档始终设置为首次加载应用程序的时间。

在数据库中存储UTC日期(datetime.utcnow而不是datetime.now)也总是更好。

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有