我正在尝试使用 django 和 mongoengine 仅通过 GridFS 提供存储后端。我还有一个 MySQL 数据库。
当我从 django 管理员中删除时,我遇到了一个奇怪的(对我来说)错误,我想知道我是否做错了什么。
我的代码如下所示:
# settings.py
from mongoengine import connect
connect("mongo_storage")
# models.py
from mongoengine.django.storage import GridFSStorage
class MyFile(models.Model):
name = models.CharField(max_length=50)
content = models.FileField(upload_to="appsfiles", storage=GridFSStorage())
creation_time = models.DateTimeField(auto_now_add=True)
last_update_time = models.DateTimeField(auto_now=True)
我可以很好地上传文件,但是当我删除它们时,似乎有些东西坏了,mongo 数据库似乎处于无法使用的状态,直到我手动删除所有 FileDocument.objects。发生这种情况时,我无法从 django 界面上传文件或删除它们。
从堆栈跟踪我有:
/home/projects/vector/src/mongoengine/django/storage.py in _get_doc_with_name
doc = [d for d in docs if getattr(d, self.field).name == name] ...
▼ Local vars
Variable Value
_[1]
[]
d
docs
Error in formatting: cannot set options after executing query
name
u'testfile.pdf'
self
/home/projects/vector/src/mongoengine/fields.py in __getattr__
raise AttributeError
我是否错误地使用了此功能?
更新:
感谢@zeekay 的回答,我能够让一个工作的gridfs 存储插件工作。我最终根本没有使用 mongoengine。我将修改后的解决方案放在github 上。有一个清晰的示例项目展示了如何使用它。我还将项目上传到pypi。
另一个更新:
我强烈推荐django-storages项目。它有很多支持存储的选项,并且比我最初提出的解决方案被更多的人使用。