apiview上的Django_filter

问题描述 投票:0回答:1

我一直在尝试在APIView上使用Django_filter,但它不起作用。我正在尝试在模型的某些字段上执行过滤器搜索。

下面是模型的设置方式

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=254, unique=True)
    name = models.CharField(max_length=250)
    picture = models.TextField(null=True, blank=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    last_login = models.DateTimeField(null=True, blank=True)
    date_joined = models.DateTimeField(auto_now_add=True)
    slug = models.SlugField(max_length=255, unique=True, blank=True)

class Skill(models.Model):
    name = models.CharField(max_length=60)
    subcategory = models.CharField(max_length=60, blank=True, null=True)
    created_on = models.DateTimeField(auto_now=True)
    updated_on = models.DateTimeField(auto_now_add=True)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.DO_NOTHING)

views.py的设置也如下所示

from django_filters import rest_framework as filters


class UserFilter(filters.FilterSet):
    email = filters.CharFilter(lookup_expr='icontains')
    name = filters.CharFilter(lookup_expr='icontains')
    profiles__skills = filters.CharFilter(lookup_expr='icontains')

    class Meta:
        model = User
        fields = ('email', 'name', 'profiles__skills')


class ListUsersView(APIView, MyPaginationMixin):
    '''
    Gets all the users in the database
    '''
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [AllowAny]
    pagination_class = api_settings.DEFAULT_PAGINATION_CLASS
    filterset_class = UserFilter

    def get(self, request):
        page = self.paginate_queryset(self.queryset)

        if page is not None:
            serializer_context = {"request": request}
            serializer = self.serializer_class(page, context=serializer_context, many=True)
            return self.get_paginated_response(serializer.data)

最后是我的serializer.py

class UserSerializer(serializers.ModelSerializer):
    slug = serializers.SlugField(read_only=True)

    class Meta:
        model = User
        fields = ('email', 'name', 'slug', 'picture')
        read_only_fields = ('email', 'name', 'slug',)

我的urls.py

path('users/', qv.ListUsersView.as_view(), name='list-users'),

这是我的结果看起来像enter image description here

请,如何使Django过滤器在APIView上工作

django django-rest-framework django-filter
1个回答
0
投票

似乎您正在尝试通过使用DRF ListAPIView获得ListAPIView相似精确行为。我在您的[[APIView中看不到任何“额外行为”。

APIView
© www.soinside.com 2019 - 2024. All rights reserved.