Python Mongoengine预删除文件字段
我是新来的mongoengine。我试图让pre_delete钩子删除存储在GridFS中的文件字段 我使用的是Python 2.7.10、Mongo 3.4和mongoengine 0.8.7 这是我的Python Mongoengine预删除文件字段,python,mongodb,python-2.7,mongoengine,Python,Mongodb,Python 2.7,Mongoengine,我是新来的mongoengine。我试图让pre_delete钩子删除存储在GridFS中的文件字段 我使用的是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
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()上的断点
我的.file.read()工作正常
集合“test”中有一个文档引用GridFS中的文件。
fs.files中有一个文件。
以fs.chunks为单位。
现在我运行m.delete()。
集合“test”为空。
fs.files不是空的。fs.chunks也不是。文件仍然存在。
根据,在删除MyFiles文档之前,我需要运行m.my_file.delete()来删除GridFS条目。如果我像这样将m.my_file.delete()放在m.delete()之前,我已经确认了这一点
但是我希望它在pre_delete中运行。这似乎是pre_delete的目的。你知道我做错了什么吗?问题出在这里。我没有记录信号。这项工作:
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()
me.signals.pre_delete.connect(MyFiles.pre_delete, sender=MyFiles)
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()
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()
me.signals.pre_delete.connect(MyFiles.pre_delete, sender=MyFiles)
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()