簡體   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