1

私は現在、djangoを使用してREST APIに取り組んでいます。私は、「ビュー」クラスを使用するのが大好きだった素敵な djangorestframework を使い始めました。しかし、シリアル化の問題に直面しています。Serializer クラスを使用したシリアライゼーションは好きではありません。主な目標は、すべての情報を含む一種の巨大な dict を準備し、それを "Accept:" HTTP ヘッダーに応じて xml、json、yaml に変換するレンダラー クラスに渡すことです。目標は上品ですが、CPU 時間の 60% は「GIANT DICT」の作成に費やされます。

このdictはdjangoモデルを使用して作成できますが、オンザフライでインスタンス化されたクラスとオブジェクトを使用するのは非常に非効率的だと思いますか? いくつかの QuerySet メソッドを使用して、必要なモデル メンバーをフィルタリングし、単純な dict : ::values() メソッドを取得しようとしていますが、残念ながら、モデルから m2m とforeignkey にアクセスできません。

あなたはすでにこれを試しましたか?でも?

4

1 に答える 1

1

QuerySet のiteratorメソッドを使用できます。

...一度だけアクセスする必要がある多数のオブジェクトを返すクエリセットの場合、これによりパフォーマンスが向上し、メモリが大幅に削減されます。

コードは次のようになります。

for obj in SomeModel.objects.values_list('id', 'name').iterator():
    # do something
于 2012-01-05T22:09:25.667 に答える