You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Django Rest Framework根据子类别筛选展示对应问题

解决方案

你只需要修改view.py中question_list接口的GET请求逻辑,新增子类别ID的查询参数过滤即可,具体修改如下:

1. 编辑view.py代码

找到GET请求的处理逻辑,新增subcategory_id过滤代码:

@api_view(['GET', 'POST', 'DELETE'])
def question_list(request):
    if request.method == 'GET':
        questions = Question.objects.all()
    
        # 原有按问题内容模糊过滤的逻辑
        question = request.GET.get('question', None)
        if question is not None:
            questions = questions.filter(question__icontains=question)

        # 新增按子类别ID过滤的逻辑
        subcategory_id = request.GET.get('subcategory_id', None)
        if subcategory_id is not None:
            questions = questions.filter(subcategory_id=subcategory_id)
    
        questions_serializer = QuestionSerializer(questions, many=True)
        return JsonResponse(questions_serializer.data, safe=False)
    # 剩下的POST、DELETE逻辑保持不变,沿用原有代码即可

注:Django会自动为ForeignKey字段生成字段名_id格式的数据库存储字段,因此这里直接用subcategory_id过滤是合法的,也可以写成subcategory__id,效果完全一致。

2. 调用方式

修改完成后,要获取数学类的问题,直接请求以下地址即可:
GET /api/questions?subcategory_id=1
因为数学子类别的subcategory_id为1,接口就只会返回该类别下的2条问题。

可选拓展:支持按子类别名称过滤

如果需要更直观的调用方式,也可以新增按子类别名称过滤的逻辑,在GET处理部分补充以下代码:

# 新增按子类别名称模糊过滤的逻辑
subcategory_name = request.GET.get('subcategory_name', None)
if subcategory_name is not None:
    questions = questions.filter(subcategory__subcategory__icontains=subcategory_name)

之后调用GET /api/questions?subcategory_name=Mathematics也能拿到数学类的问题。

内容的提问来源于stack exchange,提问作者Aras121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:51:02