djangoとmongoengineを使用して、GridFSのみでストレージバックエンドを提供しようとしています。私はまだMySQLデータベースを持っています。
django adminから削除しているときに、奇妙な(私にとって)エラーが発生し、何か間違ったことをしているのではないかと思っています。
私のコードは次のようになります:
# 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)
ファイルは問題なくアップロードできますが、ファイルを削除すると、すべてのFileDocument.objectsを手動で削除するまで、何かが壊れて、mongoデータベースが機能しなくなるように見えます。これが発生すると、ファイルをアップロードしたり、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プロジェクトを強くお勧めします。ストレージに裏打ちされたオプションがたくさんあり、私の最初に提案したソリューションよりもはるかに多くの人々によって使用されています。