Django 你不知道的filterset_fields和filter_fields区别

filter_fieldsfilterset_fields 是 Django REST framework (DRF) 中用于过滤的两个不同概念:

filter_fields

  • 定义: 在 DRF 的 ModelViewSet 中,filter_fields 允许你指定可用于过滤的字段。
  • 用法: 你可以在视图中设置这个属性,来指定哪些字段可以用于过滤。例如,如果你有一个模型包含 nameage 字段,你可以通过设置 filter_fields = ['name', 'age'] 来允许这些字段用于过滤。
  • 示例:
    from rest_framework import viewsets
    from .models import MyModel
    from .serializers import MyModelSerializer
    
    class MyModelViewSet(viewsets.ModelViewSet):
        queryset = MyModel.objects.all()
        serializer_class = MyModelSerializer
        filter_fields = ['name', 'age']

     

filterset_fields

  • 定义: filterset_fieldsdjango-filter 库的一部分,提供了更强大的过滤功能。你可以通过 django-filter 库自定义过滤器,并使用 filterset_fields 将这些过滤器应用于你的视图。
  • 用法: 你可以在视图中设置这个属性,来指定过滤字段及其类型和行为。通常与 FilterSet 类一起使用,允许更复杂的过滤逻辑。
  • 示例:
    复制代码
    import django_filters
    from rest_framework import viewsets
    from .models import MyModel
    from .serializers import MyModelSerializer
    
    class MyModelFilter(django_filters.FilterSet):
        name = django_filters.CharFilter(lookup_expr='icontains')
        age = django_filters.NumberFilter()
    
        class Meta:
            model = MyModel
            fields = ['name', 'age']
    
    class MyModelViewSet(viewsets.ModelViewSet):
        queryset = MyModel.objects.all()
        serializer_class = MyModelSerializer
        filterset_class = MyModelFilter
    复制代码

     

总结:

  • filter_fields 是 DRF 内置的简化过滤选项,适合基本过滤需求。
  • filterset_fields 使用 django-filter 库,可以提供更复杂和自定义的过滤逻辑。

根据你的需求选择适合的方式来实现过滤功能。

posted @   侬侬发  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示