django rest フレームワークバージョン 3.3.2 を使用しています。
私たちは何百もの異なる場所で使用していますが、私の問題は、これが次のことを行うメソッドをHyperlinkedRelatedField
継承していることです:choices
RelatedField
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
オプションの応答で をまったく 見る必要はありません。