Проблемы с Django с подключаемым хранилищем MongoDB

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

28
задан Aaron 3 January 2012 в 21:20
поделиться