2012-03-12 9 views
1

私はmongodb-engineと組み合わせてdjango-nonrelを使用しています。 mongodbオブジェクトに格納されているすべてのフィールドもモデル上に定義されていれば完璧に動作します。Djangoモデルの元のMongodbデータにアクセスする

しかし、私はモデルに設定されていないMongoDBのオブジェクト、上のいくつかの余分なデータを持っています。それが私の問題です。今の私はそうのように、元のMongoDBオブジェクトを取得するために余分なクエリを実行します。

collection = connection.get_collection(self._meta.db_table) 
self._mongo_data = collection.find_one({'_id': ObjectId(self.pk)}) 

それは正常に動作しますが、これは作成するための最初のこのクエリが実行される第二の時間(であるため、その効率的ではありません元のmongodbデータを取得します)。

は、モデルを作成するために取得した元のデータにアクセスする方法はありますか?余分なデータをその場で作成されるため、モデルにこれらの追加のフィールドを設定

は、オプションではありません。

答えて

1

私はこれを行うには良い方法はないと思います。選択

フィールドは、モデル内のフィールドに問合せ時に制限されています:

https://github.com/django-nonrel/mongodb-engine/blob/master/django_mongodb_engine/compiler.py#L123

https://github.com/django/django/blob/master/django/db/models/sql/query.py#L1638

あなたはdictのフィールド/埋め込みオブジェクトを使用して、ドキュメントレベルの名前空間のいくつかの種類を持つことができますこれらをつかむ?

+0

ありがとうございました!私は、モデルが作成されると、残念ながらこの余分なデータは失われ、結果セットに余分のmongoデータを追加することができ判明: https://github.com/django/django/blob/master/django/db/models/ query.py#L298 – Willian

+1

私はあなたの最善の策は、余分なデータを取って、埋め込まれたドキュメントやdictフィールドを使用して埋め込むことだと思います。 – gone

1

がSQLデータベースを使用してこれを行う方法だと、それはMongoDBのエンジンでは動作しない場合は、バグレポートを開いてください。それ以外の場合は、最初にこの機能をDjangoに追加する必要があります:-)

関連する問題