对子类的Python通用更新

2024-05-29 12:11:19 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有这样的课程:

class UpdateDocument(Document):
    modified_date = DateTimeField()
    meta = {'allow_inheritance': True}

    def save(self, *args, **kwargs):
        self.modified_date = datetime.utcnow()
        return super(UpdateDocument, self).save(*args, **kwargs)

这不起作用,因为如果它被另一个文档继承,它将无法将自己保存到自己的类中,例如:

 class New(UpdateDocument):
      name = StringField()

当您保存它时,它将作为更新文档插入到数据库中。概括save方法的变通方法是什么。这也是更新索引问题的一部分,但我更关心的是平衡类继承


Tags: 文档selfdatesaveargsinheritancedocumentmeta
1条回答
网友
1楼 · 发布于 2024-05-29 12:11:19

一种解决方案是使用mongoengine中的signals功能。从文档中:

from datetime import datetime

from mongoengine import *
from mongoengine import signals

def update_modified(sender, document):
    document.modified = datetime.utcnow()

class Record(Document):
    modified = DateTimeField()

signals.pre_save.connect(update_modified)

这将在保存所有文档之前对其应用update\u modified方法。您也可以根据文档使用类方法:

class Author(Document):
    name = StringField()

    @classmethod
    def pre_save(cls, sender, document, **kwargs):
        logging.debug("Pre Save: %s" % document.name)

    @classmethod
    def post_save(cls, sender, document, **kwargs):
        logging.debug("Post Save: %s" % document.name)
        if 'created' in kwargs:
            if kwargs['created']:
                logging.debug("Created")
            else:
                logging.debug("Updated")

signals.pre_save.connect(Author.pre_save, sender=Author)
signals.post_save.connect(Author.post_save, sender=Author)

相关问题 更多 >

    热门问题