view.py
class LargeResultsSetPagination(PageNumberPagination):
"""自定义分页"""
page_size = 25
page_size_query_param = 'page_size'
max_page_size = 25
# 测评-组卷工具-搜索题目
class SearchQuestions(generics.ListAPIView):
from rest_framework import filters
renderer_classes = [StatusCodeRenderer] # 自定义错误码
permission_classes = [IsAuthenticated] # 自定义权限校验
queryset = Question.objects.all()
pagination_class = LargeResultsSetPagination
filter_backends = [filters.SearchFilter]
serializer_class = SearchQuestionsSerializer
"""
search_fields
'^'开始搜索。
'='完全匹配。
'@'全文搜索。(当前仅支持Django的PostgreSQL后端。)
'$'正则表达式搜索。
"""
search_fields = ['$body']
def get_queryset(self):
.....
.....
return Question.objects.filter()
serializers.py
class SearchQuestionsSerializer(serializers.ModelSerializer):
"""搜索题目序列化"""
knowledge_node = serializers.StringRelatedField(many=True) # 知识点图谱
options = serializers.SerializerMethodField() # 自定义字段: 选择题选
favorite = serializers.SerializerMethodField() # 自定义字段: 是否收藏
# 序列化自定义添加返回字段
def get_options(self, obj):
"""选择题选项数据"""
options_dict = []
.....
....
return options_dict
# 这里需要格式get_自定义字段
def get_favorite(self, obj):
"""老师是否收藏"""
....
....
if favorites_questions.filter(id=obj.id).exists():
return True
else:
return False
class Meta:
model = Question
# "options", "favorite" mmodels.py对应模型没有字段
fields = ["id", "body", "img", "question_type", "knowledge_node", "options", "favorite"]
http://xxx.xxx.xxx.xxx/abc/searchQuestions/?book_id=ea47b913-a53a-4c8f-a9e9-16f290e0b26a&page=1&search=四个图形中可以由图形