【问题标题】: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']