首页 > 解决方案 > 基于类的视图过滤 Django Rest 框架

问题描述

我有一个基于类的视图,向我显示所有餐厅的所有产品,但我想使用 request.user.restaurant 仅显示实际餐厅的产品,但这对我不起作用,它显示我所有餐厅和所有产品....

class MealListCreateAPIView(generics.ListCreateAPIView):

    queryset            = Meal.objects.all()
    serializer_class    = MealSerializer
    permission_classes  = [permissions.IsAuthenticatedOrReadOnly]

    def get_queryset(self):
        request = self.request
        qs = Meal.objects.all()
        query = request.GET.get('q')
        if query is not None:
            qs = qs.filter(name__icontains=query, description__icontains=query)
        return qs

    def get_restaurant(self):
        qs = Meal.objects.all()
        query = request.GET.get('')
        if query is not None:
            qs = qs.filter(restaurant = self.request.restaurant.user).order_by("-id")
        return qs

标签: pythondjangorestdjango-rest-frameworkdjango-class-based-views

解决方案


您可以使用 APIView 而不是 ListCreatAPIView

class MealListAPIView(APIView):

    serializer_class = MealSerializer

    def get(self, request):
        qs = Meal.objects.all()
        query = request.GET.get('')
        if query is not None:
            qs = qs.filter(restaurant = self.request.restaurant.user).order_by("-id")
            return self.serializer_class(data=qs, many=True)

推荐阅读