http 経由で Django-nonrel+MongoDB とモバイル デバイスの間で情報を交換したいと考えています。モバイル デバイスが API にリクエストを送信すると、Django ビューがクエリを実行し、クエリ結果のシリアル化で応答したいと考えています。
私の問題は、Django の組み込みのシリアル化形式が、組み込みの集約とリストを含むモデルでうまく機能しないことです。これらの no-sql 機能を使用しないことでこれを回避できますが、そもそも MongoDB を使用する動機が無効になります。
MongoDB クエリからデータをシリアル化する最良の方法は何ですか?
bson をインポートして「エンコード」および「デコード」機能を使用できることはわかっていますが、それらは辞書でしか機能しないようです。私の現在の洗練されていないビュー テスト コードは、基になるモデルから面倒な埋め込み辞書構造を作成します。
def get_announcements(request):
"""
Return a BSON representation of the ten most recent announcements relevant to the
user.
"""
user = User.objects.get(username='*<somebody>*') # Test User for now
campaign_announcements = Campaign.objects.filter(workers=user.id)[:10]
data = {}
for campaign in campaign_announcements:
data[campaign.name] = []
for announcement in campaign.announcements:
data[campaign.name].append({
'tagline': announcement.tagline,
'content': announcement.content,
'release_time': announcement.release_time,
})
return HttpResponse(BSON.encode(data))
私はこれを行うことができるようにしたいと思います:
return HttpResponse(serializers.serialize("bson", <query>))
これは、bson が使用すべき形式であると想定しています。これは MongoDB のデフォルト形式であるため、これを想定しています。
他の質問への回答では、PyMongo の json_util submoduleについて言及しています。私はそれを見ましたが、私がやろうとしていることをしているとは思いません。
ありがとう!
2013 年 8 月 20 日更新: 私の質問に回答してくださった方々に感謝します。no-sqlを放棄することにしました。面白くて便利なテクノロジのようですが、私の環境 (Django、Heroku、および Android) ではうまく機能しないようです。埋め込みオブジェクトを有用な方法でシリアル化するには、避けたいハッキングがたくさんあるようです.Android は SQLite を使用するため、とにかくシリアル化されたデータをスキーマに変換する必要があります。