初始化一个新的mongoengine文档时调用某些函数
Calling certain functions when initializing a new mongoengine document
我正在尝试定义一个文档 class,其中有一些字段在创建新文档时会自动计算其值。
到目前为止,我已经通过像这样扩展 __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__
函数将再次被触发 在文件.
我想实现这个但是只有当文档是新的时候,我到处都找不到答案..
有没有办法在初始化 new 文档而不是初始化 existing 文档时调用某些函数?
我让它工作了,我不知道它是否可以解决,但我在 init 函数上检查了 self._id
(一个 ID 仅在保存时创建)以及是否有 none(表示这是一个新文档),我设置了值。
我正在尝试定义一个文档 class,其中有一些字段在创建新文档时会自动计算其值。
到目前为止,我已经通过像这样扩展 __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()
.
当我开始通过 URLDoc.objects.get(id="some id")
从 mongo 加载现有文档时,我意识到 __init__
函数将再次被触发 在文件.
我想实现这个但是只有当文档是新的时候,我到处都找不到答案..
有没有办法在初始化 new 文档而不是初始化 existing 文档时调用某些函数?
我让它工作了,我不知道它是否可以解决,但我在 init 函数上检查了 self._id
(一个 ID 仅在保存时创建)以及是否有 none(表示这是一个新文档),我设置了值。