Serializers,ModelSerializers自定义字段的扩展操作SerializerMethodField 搜索 分页

41 篇文章 2 订阅

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=四个图形中可以由图形

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ch3nnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值