【发布时间】:2022-06-18 11:15:34
【问题描述】:
我正在研究 Django==3.2.7、djangorestframework==3.12.4 和 django-filter==21.1。并为前端做出反应
我想做的事:
- 返回包含搜索字词的 Job Offer 对象(搜索字段 job_title 和 localistation)
- 删除搜索中的无用词,例如 ('in', 'a', 'an', 'the', 'at', 'for', 'to')
这里是 url 的示例:
{{URL}}/api/v1/job-offers/jobs/?search=Chef in Texas
allowed_methods = ['GET']
到目前为止,我在 (ListAPIView) 中所做的事情:
class JobOfferListAPIView(generics.ListAPIView):
permission_classes = [permissions.IsAuthenticated]
queryset = JobOffer.objects.all()
serializer_class = JobOfferSerializer
filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend]
search_fields = ['job_title', 'localisation']
ordering_fields = ['user', 'is_active']
filterset_fields = ['user', 'is_active', 'job_title', 'type_of_job', 'start_date', 'salary', 'localisation']
def get_queryset(self, *args, **kwargs):
exclude_words = ['in', 'a', 'an', 'the', 'at', 'for', 'to']
keywords = self.request.GET.get('search').split(' ')
keywords = [keyword for keyword in keywords if keyword not in exclude_words]
if keywords:
for keyword in keywords:
queryset = queryset.filter(
Q(job_title__icontains=keyword) | Q(localisation__icontains=keyword)
)
print(queryset)
return queryset
问题: 当我打印查询集时,我可以在终端中看到过滤的工作机会,但在 Postman 中没有返回。
邮递员屏幕
【问题讨论】:
标签: django django-rest-framework drf-queryset