【发布时间】:2017-01-25 17:04:24
【问题描述】:
我是 mongoengine 的新手。我正在尝试使用 pre_delete 挂钩来删除存储在 GridFS 中的 FileField。
我正在使用 Python 2.7.10、Mongo 3.4 和 mongoengine 0.8.7。
这就是我所拥有的。
import uuid
import mongoengine as me
class MyFiles(me.Document):
meta = {"collection": "test"}
guid = me.UUIDField(binary=False, required=True)
my_file = me.FileField()
@classmethod
def pre_delete(cls, sender, document, **kwargs):
document.my_file.delete()
if __name__ == '__main__':
me.connect(db='main', alias='default', host='localhost')
m = MyFiles(guid=uuid.uuid4())
m.my_file.new_file(content_type='text/plain')
m.my_file.write("This is")
m.my_file.write("my file")
m.my_file.write("Hooray!")
m.my_file.close()
m.save()
print(m.my_file.read())
m.delete()
现在我在 m.delete() 上使用断点进行调试
my.file.read() 有效。
集合“test”中有一个文档引用了 GridFS 中的文件。
fs.files 不为空。 fs.chunks 也不是。该文件仍然存在。
根据mongoengine docs for gridfs,我需要在删除 MyFiles 文档之前运行 m.my_file.delete() 来删除 GridFS 条目。如果我像这样将 m.my_file.delete() 放在 m.delete() 之前,我已经确认这是可行的。
m.save()
print(m.my_file.read())
m.my_file.delete()
m.delete()
但是我希望它在 pre_delete 中运行。这似乎是 pre_delete 的目的。任何想法我做错了什么?
【问题讨论】:
标签: python mongodb python-2.7 mongoengine