[英]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
您可以使用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)
對於上述情況,我們只需要重寫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.