0

django rest フレームワークバージョン 3.3.2 を使用しています。

私たちは何百もの異なる場所で使用していますが、私の問題は、これが次のことを行うメソッドをHyperlinkedRelatedField継承していることです:choicesRelatedField

class RelatedField(Field):

    ...

    @property
    def choices(self):
        queryset = self.get_queryset()
        if queryset is None:
            # Ensure that field.choices returns something sensible
            # even when accessed with a read-only field.
            return {}

        return OrderedDict([
            (
                six.text_type(self.to_representation(item)),
                self.display_value(item)
            )
            for item in queryset
        ])

そのクエリセットは別のテーブルへのリレーションであり、数十万行を含めることができます。API への OPTIONS リクエストは、利用可能なリレーションの選択肢に対して json レスポンスを生成しようとするため、利用可能なすべてのメモリを消費するようになりました。オプションでこの数を 1000 に切り捨ててもhtml_cutoff、カットオフによって制限される前にクエリセットが既に消費されているため、問題は残ります。

外部キーの選択肢の列挙を無効にする邪魔にならない方法を探しています。カスタム フィールド クラスの作成を避けたいのですが、可能であれば、残りのフレームワーク API を介してこの動作に影響を与える方法はありますか? choicesオプションの応答で をまったく 見る必要はありません。

4

2 に答える 2

0

OPTIONSメタデータ API を使用して、Django REST フレームワークで任意のリクエストのコンテンツを変更できます。

これには、独自の Metadata クラスの定義が含まれます。このドキュメント ページを参照してください。

問題の原因となっているビューにカスタム メタデータ クラスを追加できます。

于 2016-02-22T22:20:05.467 に答える