filter_fields
和 filterset_fields
是 Django REST framework (DRF) 中用于过滤的两个不同概念:
filter_fields
- 定义: 在 DRF 的
ModelViewSet
中,filter_fields
允许你指定可用于过滤的字段。 - 用法: 你可以在视图中设置这个属性,来指定哪些字段可以用于过滤。例如,如果你有一个模型包含
name
和age
字段,你可以通过设置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_fields
是django-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
库,可以提供更复杂和自定义的过滤逻辑。
根据你的需求选择适合的方式来实现过滤功能。
标签:fields,Django,filter,过滤,import,class,filterset From: https://www.cnblogs.com/beichengshiqiao/p/18322665