我试图定义一个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__
函数将再次被触发,在文档中设置新数据(例如,获取新的屏幕截图)。
我想实现这一点,但是只有当文档是新的时,我到处抬头却找不到答案。
初始化新文档时是否有方法调用某些函数,而不是初始化现有文档?
答案 0 :(得分:0)
我可以使用它,我不知道它是否可以解决,但是我在init函数上检查了self._id
(仅在保存时创建了一个id),以及是否没有(意味着它是一个新文档),则设置值。