Python Django-Tastypie-使用URL参数筛选anyfield资源

Python Django-Tastypie-使用URL参数筛选anyfield资源,python,django,python-2.7,tastypie,Python,Django,Python 2.7,Tastypie,我正在使用Tastypie为我的Django(v1.5)应用程序实现一个API。我希望能够过滤/限制我在访问父资源时获得的相关资源 以下是我的(简化)模型: 我的资源: # api/resources.py class DataResource(ModelResource): class Meta: queryset = Data.objects.all() resource_name = 'cgm' fields = ['value',

我正在使用Tastypie为我的Django(v1.5)应用程序实现一个API。我希望能够过滤/限制我在访问父资源时获得的相关资源

以下是我的(简化)模型:

我的资源:

# api/resources.py
class DataResource(ModelResource):
    class Meta:
        queryset = Data.objects.all()
        resource_name = 'cgm'
        fields = ['value', 'datetime']
        serializer = Serializer(formats=['json', 'xml'])
        filtering = {
            'datetime': ('gte', 'lte'),
        }
        include_resource_uri = False

    def dehydrate(self, bundle):
        bundle.data['timestamp'] = calendar.timegm(bundle.data['datetime'].utctimetuple())
        return bundle


class UserResource(ModelResource):

    data = fields.ToManyField(DataResource, attribute=lambda bundle: Data.objects.filter(patient_id=bundle.obj.id), full=True, related_name='data', null=True)

    class Meta:
        queryset = User.objects.all().order_by('number')
        resource_name = 'user'
        fields = ['number', 'timezone', 'device_id'],
        serializer = Serializer(formats=['json', 'xml'])
        filtering = {
            'data': ALL_WITH_RELATIONS,
        }
我希望能够使用URL参数在用户资源中按“datetime”筛选数据资源,例如:

127.0.0.1:8000/api/v1/user/1/?format=json&datetime__gte=2013-11-14%2012:00:00 

获取用户的号码、时区、设备id和使用给定日期时间过滤的数据列表

我不希望必须单独查询数据资源来过滤它们,我希望将整个内容捆绑在用户资源中。 是否有一种方法可以使用框架实现应用于嵌套资源的过滤器


谢谢你的时间,我会很感激你的建议

您可以使用满标度函数扩展传递给
数据
字段的
属性
参数,并重用
数据资源

def filter_data_items(bundle):
    res = DataResource()
    new_bundle = Bundle(request=bundle.request)
    objs = res.obj_get_list(new_bundle)
    return objs.filter(parent_id=bundle.obj.pk)
res.obj_get_list
根据您的
DataResource
处理构建和应用过滤器的操作。您只需在
parent\u id
上进一步过滤即可

127.0.0.1:8000/api/v1/user/1/?format=json&data__datetime__gte=2013-11-14%2012:00:00
def filter_data_items(bundle):
    res = DataResource()
    new_bundle = Bundle(request=bundle.request)
    objs = res.obj_get_list(new_bundle)
    return objs.filter(parent_id=bundle.obj.pk)