obj_get_list上的Tastypie关系字段

时间:2013-05-03 05:49:08

标签: tastypie

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

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排除链接用户,但在查看组实例时包括用户?或者是否有另一种解决方案可以更好地适应这个问题?

1 个答案:

答案 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"