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

如何在Wagtail的PagesAPIViewSet中按关联模型字段筛选?

解决方案

你完全可以用DRF自带的DjangoFilterBackend实现按分类名称筛选的需求,不需要自定义筛选后端,具体步骤如下:

  • 先确认依赖安装
    确保已经安装了django-filter:

    pip install django-filter
    
  • 配置过滤后端
    可以选择全局配置或仅在当前视图集局部生效:

    • 全局配置(在项目settings.py中):
      REST_FRAMEWORK = {
          'DEFAULT_FILTER_BACKENDS': [
              'django_filters.rest_framework.DjangoFilterBackend',
          ]
      }
      
    • 局部配置(仅针对EntriesViewSet):
      修改你的视图集代码,添加过滤相关配置:
      from django_filters.rest_framework import DjangoFilterBackend
      
      class EntriesViewSet(PagesAPIViewSet):
          base_serializer_class = EntryPageWithSiblingsSerializer
          model = EntryPage
          body_fields = PagesAPIViewSet.body_fields + EntryPageWithSiblingsSerializer.Meta.fields
          listing_default_fields = PagesAPIViewSet.listing_default_fields + EntryPageWithSiblingsSerializer.Meta.fields
          detail_only_fields = ["prev_entry", "next_entry"]
          
          # 添加过滤后端
          filter_backends = [DjangoFilterBackend]
          # 指定允许跨关联筛选的字段
          filter_fields = ['categories__name']
      
  • 测试筛选功能
    现在就可以用你想要的请求路径进行筛选了:

    /wt/api/nextjs/v1/blog_entries/?categories__name=name
    

    该请求会返回所有关联了名称为name的Category的EntryPage实例。

  • 进阶:自定义过滤规则(可选)
    如果需要更灵活的筛选逻辑(比如大小写不敏感的模糊匹配),可以自定义FilterSet类:

    import django_filters
    from .models import EntryPage
    
    class EntryPageFilter(django_filters.FilterSet):
        # 支持大小写不敏感的模糊匹配
        categories__name = django_filters.CharFilter(field_name='categories__name', lookup_expr='icontains')
    
        class Meta:
            model = EntryPage
            fields = ['categories__name']
    

    然后在视图集中替换为自定义的FilterSet:

    class EntriesViewSet(PagesAPIViewSet):
        # ... 其他原有属性
        filter_backends = [DjangoFilterBackend]
        filterset_class = EntryPageFilter
    

    这样就能支持类似/?categories__name=NAME(不区分大小写)的筛选请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:08