如何重命名Django rest\u框架的search\u字段?

2024-04-26 14:59:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有

class ProductSearch(ListAPIView):
    queryset = Product.objects.all()
    permission_classes = [AllowAny]
    serializer_class = ProductSearchSerializer
    filter_backends = [SearchFilter]
    filter_fields = ['meta_data', 'store__district__id']

但当我通过api进行搜索时,我需要输入

"store__district__id": "blabla"

但我只想

"district_id": "x"

有人能帮忙吗?你知道吗


Tags: storeidobjectsallproductfilterclassclasses
1条回答
网友
1楼 · 发布于 2024-04-26 14:59:26

自定义搜索筛选器,如下所示:

from rest_framework import filters

class ProductSearchFilter(filters.SearchFilter):
    def get_search_fields(self, view, request):
        fields = super(CustomSearchFilter, self).get_search_fields(view, request)
        if 'district_id' in fields:
            fields['store__district__id'] = fields.pop('district_id')
        return fields

把它放在你的filter_backends里,把district_id放在视图的search_fields里:

class ProductSearch(ListAPIView):
    queryset = Product.objects.all()
    permission_classes = [AllowAny]
    serializer_class = ProductSearchSerializer
    filter_backends = [ProductSearchFilter]
    search_fields = ['meta_data', 'district_id']

相关问题 更多 >