[英]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.