初始化新的mongoengine文档时调用某些函数

时间:2018-11-20 23:23:30

标签: python mongoengine

我试图定义一个Document类,其中包含一些字段,这些字段在创建新文档时会自动计算其值。 到目前为止,我已经通过扩展__init__函数来做到这一点:

class URLDoc(Document):
    url = fields.URLField(requierd=True)
    domain = fields.StringField(required=True)
    screenshot = fields.ImageField(required=True, size=(600, 600, True), thumbnail=(100, 100, True))

    def __init__(self, *args, **kwargs):
        super(URLDoc, self).__init__(*args, **kwargs)
        self.domain = urlparse(self.url).netloc
        self.get_and_save_screenshot()


    def get_and_save_screenshot(self):
        '''Some code to get a screenshot of the website on self.url'''

        self.screenshot.put(screenshot_file)
        self.save()

通过这种方式,我可以通过先调用new_urldoc = URLDoc(url="some url")然后再调用new_urldoc.save()在mongo中创建新文档。

当我开始通过URLDoc.objects.get(id="some id")从mongo加载现有文档时,我意识到__init__函数将再次被触发,在文档中设置新数据(例如,获取新的屏幕截图)。

我想实现这一点,但是只有当文档是新的时,我到处抬头却找不到答案。

初始化文档时是否有方法调用某些函数,而不是初始化现有文档?

1 个答案:

答案 0 :(得分:0)

我可以使用它,我不知道它是否可以解决,但是我在init函数上检查了self._id(仅在保存时创建了一个id),以及是否没有(意味着它是一个新文档),则设置值。