【问题标题】:How can I rename field in search_fields of django rest_framework?如何重命名 django rest_framework 的 search_fields 中的字段?
【发布时间】:2019-11-25 03:05:25
【问题描述】:

我有

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"

有人可以帮忙吗?

【问题讨论】:

    标签: python django django-rest-framework django-filter django-filters


    【解决方案1】:

    像这样自定义搜索过滤器:

    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']
    

    【讨论】:

    • 这正是我想要的。非常感谢!
    猜你喜欢
    • 2018-11-13
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2012-06-28
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多