【发布时间】:2016-06-04 12:53:26
【问题描述】:
我使用的是django rest framework 3.3.2 版。
我们在数百个不同的地方使用HyperlinkedRelatedField,我的问题是它通过RelatedField 继承了choices 方法,它执行以下操作:
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。
【问题讨论】:
标签: python django api django-rest-framework http-options-method