0

我有一个非常标准的用户/组与以下简化定义的多对多关系:

class GroupResource(ModelResource):
    users = fields.ToManyField(UserResource, 'group_set')

class Meta:
    cache = SimpleCache()
    queryset = Group.objects.all()
    resource_name = "hr/group"

当我得到一个列表组时,它会返回该组以及连接到该组的用户的 uri 列表。然而,我们的生产系统开始变得相当大,一个组可以有数百个用户。返回组列表变得非常缓慢,因为每个组还返回一个连接到该组的用户列表。

有没有办法仅排除 obj_get_list 的链接用户,但在查看组实例时包括用户?或者是否有另一种更适合这个问题的解决方案?

4

1 回答 1

3

如果当前请求对应于get_list端点,您需要指定一个callableasuse_in参数。fields.ToManyFieldFalse

示例代码

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"
于 2013-05-09T08:36:21.810 回答