繁体   English   中英

基于类的视图过滤Django Rest框架

[英]Class Based View Filtering Django Rest Framework

我有一个基于类的视图,可以向我显示所有餐厅的所有产品,但是我想使用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

您可以使用API​​View代替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)

对于上述情况,我们只需要重写get_queryset方法。 该代码将如下所示

class MealListCreateAPIView(generics.ListCreateAPIView):
    queryset = Meal.objects.all()
    serializer_class = MealSerializer

    def get_queryset(self):
        queryset = self.queryset.filter(restarent=self.request.user.restaurant)
        q = self.request.GET.get('q')
        if q:
            queryset = queryset.filter(name__icontains=q, description__icontains=q)
        return queryset

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM