Существует ли общий способ фильтрации по массиву идентификаторов при использовании DRF? Например, если бы я хотел, чтобы вернуть все изображения со следующими идентификаторами, я хотел бы сделать это:Общий способ фильтрации по идентификаторам с DRF
/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
). Есть ли способ, которым я могу просто определить этот фильтр, чтобы я мог использовать его на нескольких ViewSets с разными моделями?
Не решение, однако по тем же причинам я добавил дополнительные поля в свою модель для хранения имени файла и даже ключевых слов файла. Таким образом, я могу легко искать файлы по имени и ключевому слову. – WayBehind