【发布时间】:2016-08-19 11:23:39
【问题描述】:
在使用 DRF 时,是否有一种通用的方法可以按 ID 数组进行过滤? 例如,如果我想返回所有具有以下 ID 的图像,我会这样做:
/images/?ids=1,2,3,4
我目前的实现是执行以下操作:
# filter
class ProjectImageFilter(django_filters.FilterSet):
"""
Filter on existing fields, or defined query_params with
associated functions
"""
ids = django_filters.MethodFilter(action='id_list')
def id_list(self, queryset, value):
"""
Filter by IDs by passing in a query param of this structure
`?ids=265,263`
"""
id_list = value.split(',')
return queryset.filter(id__in=id_list)
class Meta:
model = ProjectImage
fields = ['ids',]
# viewset
class Images(viewsets.ModelViewSet):
"""
Images associated with a project
"""
serializer_class = ImageSerializer
queryset = ProjectImage.objects.all()
filter_class = ProjectImageFilter
但是,在这种情况下,ProjectImageFilter 需要指定模型 (ProjectImage)。有没有一种方法可以让我通常定义这个过滤器,以便我可以在具有不同模型的多个 ViewSet 上使用它?
【问题讨论】:
-
不是一个解决方案,但是出于同样的原因,我在模型中添加了其他字段来存储文件名甚至文件关键字。这样我就可以轻松地按名称和关键字搜索我的文件。
标签: python django python-2.7 django-rest-framework