Я пытаюсь использовать 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-storerages . Он имеет множество опций с поддержкой хранилища и используется гораздо большим количеством людей, чем предложенное мной исходное решение.