Django DRF-使用基本搜索过滤器进行多重或搜索 [英] Django DRF - using basic search filter to do an multiple OR search
问题描述
我正在尝试使用基本的Django过滤器进行多重或搜索.香港专业教育学院已经尝试了以下URL,但它们只返回第一个结果
Im trying to do a multiple OR search with the basic Django filter. Ive tried the below URLs already but they only return the first result
api/circuit/?search = AB5814765; AB827451; AB0923784
api/circuit/?search=AB5814765;AB827451;AB0923784
使用逗号也不会返回结果.
using a comma returns no results also.
是否有任何语法可以显示内置的多个记录或需要做一些自定义的操作,我尝试了几次自定义尝试,但它们也都失败了
is there any syntax that will show multiple records built in or does something custom need making, ive tried a few custom attempts but they are all failing too
尝试执行以下操作时,我会得到404
using an action like the below gives me a 404 when I try to do
api/circuit/ref_search/AB5814765 | AB827451 | AB0923784
api/circuit/ref_search/AB5814765|AB827451|AB0923784
@action(detail=False, methods=['get'], url_path='ref_search/(?P<refs>[^/.]+)/', permission_classes=[IsAdminUser])
def ref_search(self, request, refs, *args, **kwargs):
refs = refs.split('|')
query = Q()
for x in refs:
q = Q(circuit__ref_no=x)
query |= q
queryset = DeviceCircuitSubnets.objects.filter(query)
serializer = self.serializer_class(queryset, many=True)
return Response(data=serializer.data)
我也尝试过
api/circuit/ref = AB5814765 | AB827451 | AB0923784
api/circuit/ref=AB5814765|AB827451|AB0923784
def get_queryset(self):
refs = self.request.query_params.get('ref', None)
if refs is not None:
refs = refs.split('|')
query = Q()
for x in refs:
q = Q(status=x)
query |= q
queryset = queryset.filter(query)
return queryset
我的观点:
class SiteCircuitDataROView(viewsets.ReadOnlyModelViewSet):
queryset = Circuit.objects.all()
serializer_class = CircuitSerializer
permission_classes = (IsAdminUser,)
filter_class = Circuit
filter_backends = (filters.SearchFilter,)
推荐答案
您可以执行以下操作,使用 __ in
并调用 api/circuit/?refs = AB5814765 | AB827451 | AB0923784
You can do something like this, using __in
and call api/circuit/?refs=AB5814765|AB827451|AB0923784
class SiteCircuitDataROView(viewsets.ReadOnlyModelViewSet):
queryset = Circuit.objects.all()
serializer_class = CircuitSerializer
permission_classes = (IsAdminUser,)
filter_class = Circuit
filter_backends = (filters.SearchFilter,)
@action(detail=False, methods=['get'], url_path='ref_search/', permission_classes=[IsAdminUser])
def ref_search(self, request, *args, **kwargs):
refs = self.request.get('refs', '').split('|')
queryset = DeviceCircuitSubnets.objects.filter(ref__in=refs)
serializer = self.serializer_class(queryset, many=True)
return Response(data=serializer.data)
这篇关于Django DRF-使用基本搜索过滤器进行多重或搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!