我有一个非常标准的用户/组与以下简化定义有很多关系:
class GroupResource(ModelResource):
users = fields.ToManyField(UserResource, 'group_set')
class Meta:
cache = SimpleCache()
queryset = Group.objects.all()
resource_name = "hr/group"
当我获得列表组时,它会返回该组以及连接到该组的用户uris列表。但是,我们的生产系统开始变得非常庞大,一个组可以拥有数百名用户。返回组列表变得非常慢,因为每个组还返回一个连接到该组的用户列表。
是否有办法仅为obj_get_list排除链接用户,但在查看组实例时包括用户?或者是否有另一种解决方案可以更好地适应这个问题?
答案 0 :(得分:3)
您需要为callable
指定use_in
作为fields.ToManyField
参数,如果当前请求对应于get_list结束点,则返回False
。
def is_not_group_get_list_end_point(bundle):
# TODO: use dynamically generated path here.
if bundle.request.get_full_path() == '/api/v1/hr/group/':
return False
return True
class GroupResource(ModelResource):
users = fields.ToManyField(UserResource, 'group_set',
use_in=is_not_group_get_list_end_point)
class Meta:
cache = SimpleCache()
queryset = Group.objects.all()
resource_name = "hr/group"