Фильтрация представлений на основе классов Django Rest Framework - PullRequest
0 голосов
/ 10 июня 2018

У меня есть представление на основе классов, в котором отображаются все продукты для всех ресторанов, но я хочу отобразить только продукты реальных ресторанов, используя 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

Ответы [ 2 ]

0 голосов
/ 21 июня 2018

В вышеприведенном случае нам нужно только переопределить метод 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
0 голосов
/ 11 июня 2018

вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...