1
在使用DRF时,是否可以通过ID数组进行过滤? 例如,如果我想用下面的ID返回的所有图像,我会做到这一点:通过DRF 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
然而,在这种case ProjectImageFilter
需要指定一个模型(ProjectImage
)。有没有一种方法可以简单地定义此过滤器,以便我可以在多个ViewSets上使用不同的模型?
不是一个解决方案,但是出于同样的原因,我已经添加了额外的字段到我的模型来存储文件名甚至文件关键字。这样我就可以通过名称和关键字轻松搜索我的文件。 – WayBehind