Я пытаюсь использовать 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.object. Когда это произойдет, я не могу загружать файлы или удалять их из интерфейса 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
Я использую эту функцию неправильно?
UPDATE:
благодаря ответу @zeekay Мне удалось получить рабочий плагин для gridfs для работы. В конце концов я не использовал монгонген. Я положил свое адаптированное решение на github. Существует четкий образец проекта, показывающий, как его использовать. Я также загрузил проект в pypi.
Другое обновление:
Я очень рекомендую проект django-storages. Он имеет множество вариантов поддержки хранения и используется многими другими людьми, чем мое первоначальное предлагаемое решение.