使用DRF ModelSerializer与search_fields时字段关键字解析失败问题
问题原因与解决方案
问题根源
DRF的SearchFilter是在数据库层面执行搜索的,它只能识别模型本身的字段,或者通过双下划线__关联的关联模型字段。你在VacancySerializer里定义的organization_small_name是序列化层的虚拟字段,数据库中不存在这个字段,因此SearchFilter无法解析该关键词,导致报错。
解决方法
直接在ViewSet的search_fields中使用关联模型的字段路径,通过organization__short_name关联到DictOrganization的short_name字段,替换原来的organization_small_name。
修改后的ViewSet代码:
class VacancyViewSet(viewsets.ModelViewSet): queryset = Vacancy.objects.all() serializer_class = VacancySerializer filter_backends = [filters.SearchFilter] # 改用关联模型的字段路径 search_fields = ['organization__short_name'] ...
额外说明
修改后,搜索请求会直接在数据库层面查询Vacancy关联的DictOrganization的short_name字段,完全满足你的搜索需求,同时Serializer中的organization_small_name依然可以正常返回给前端,不影响数据序列化逻辑。
内容的提问来源于stack exchange,提问作者kims9
相关产品推荐
相关产品推荐

