gpt4 book ai didi

python - 在 drf 中使用带有 list_routes 的过滤器

转载 作者:太空狗 更新时间:2023-10-30 02:08:31 29 4
gpt4 key购买 nike

有没有一种方法可以像在 DRF 中为 Root View 集使用过滤器一样为 @list_route 使用过滤器?

我有一个模型,我已经为其配置了过滤器和我无法配置的详细路线:

class ListingViewSet(viewsets.ModelViewSet):
# disable listing after 5 flags
queryset = Listing.objects.all()

serializer_class = ListingSerializer
filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)
permission_classes = (ListingOwnerCanEdit,)
filter_class = ListingFilter

@list_route()
def homepage(self, request):
queryset = Listing.objects.filter(flags__lt=5, closed=False)

### Doesn't work
# filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)
# permission_classes = (ListingOwnerCanEdit,)
# filter_class = ListingFilter
# ordering_filter = OrderingFilter()
# ordering_fields = ('price', 'views')
# search_fields = ('title', 'description')

serializer = ListingSerializer(queryset, many=True, context=self.get_serializer_context())
return Response(serializer.data)

ListingFilter 是:

class ListingFilter(django_filters.rest_framework.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_expr='gte')
max_price = django_filters.NumberFilter(name="price", lookup_expr='lte')
author_pk = django_filters.CharFilter(name='author_pk')

class Meta:
model = Listing
fields = ['price_type', 'sale_type', 'category__name', 'min_price', 'max_price', 'description', 'title',
'listing_date', 'views', 'number_of_inquiries', 'author_pk', 'closed', 'closing_date']

有没有办法在主页列表路由中使用 ListingFilter

最佳答案

您应该在用@list_route 修饰的方法中调用filter_queryset:

@list_route()
def homepage(self, request):
queryset = self.get_queryset().filter(flags__lt=5, closed=False)
queryset = self.filter_queryset(queryset)

serializer = ListingSerializer(queryset, many=True, context=self.get_serializer_context())
return Response(serializer.data)

编辑:使用 self.get_queryset() 代替 Listing.objects 也是一个好主意。

关于python - 在 drf 中使用带有 list_routes 的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42681991/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com