我正在使用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 响应。即使html_cutoff
选项将此数字截断为 1000,问题仍然存在,因为查询集在被截断限制之前已经被使用。
我正在寻找一种非侵入式方法来禁用外键上的选择枚举。我想避免创建自定义字段类,如果可能的话,有没有办法通过其余框架 api 影响这种行为?我根本不需要choices
在选项响应中看到。