DRF ViewSet - 处理查询参数
DRF ViewSet - dealing with query params
我想根据查询参数更改我的 ViewSet 中的查询集。
我看到查询参数中有一个标签列表,但是当我尝试提取它们时,我只得到最后一个标签作为字符串。而且我不知道为什么以及如何工作。有人可以为我解释一下吗?
class RecipeViewSet(ModelViewSet):
pagination_class = PageNumberPagination
permission_classes = [IsAuthenticatedOrReadOnly, IsAuthorOrReadOnly]
def get_serializer_class(self):
if self.action in ['list', 'retrieve']:
return RecipeListSerializer
return RecipeCreateSerializer
def get_queryset(self):
queryset = Recipe.objects.all()
params = self.request.query_params
tags = params.get("tags")
print("params:")
print(params) # <QueryDict: {'page': ['1'], 'limit': ['6'], 'tags': ['breakfast', 'lunch', 'dinner']}>
print("tags:")
print(type(tags)) # <class 'str'>
print(tags) # I get only str - "dinner"
if tags:
queryset = Recipe.objects.filter(tags__slug__in=tags).distinct()
return queryset
要获取列表,您需要使用 getlist
。在您的情况下,它看起来像这样:
params.getlist("tags[]")
这是因为您正在使用类型 QueryDict
而不是 dict
的实例。您可以找到更多信息 .
我想根据查询参数更改我的 ViewSet 中的查询集。 我看到查询参数中有一个标签列表,但是当我尝试提取它们时,我只得到最后一个标签作为字符串。而且我不知道为什么以及如何工作。有人可以为我解释一下吗?
class RecipeViewSet(ModelViewSet):
pagination_class = PageNumberPagination
permission_classes = [IsAuthenticatedOrReadOnly, IsAuthorOrReadOnly]
def get_serializer_class(self):
if self.action in ['list', 'retrieve']:
return RecipeListSerializer
return RecipeCreateSerializer
def get_queryset(self):
queryset = Recipe.objects.all()
params = self.request.query_params
tags = params.get("tags")
print("params:")
print(params) # <QueryDict: {'page': ['1'], 'limit': ['6'], 'tags': ['breakfast', 'lunch', 'dinner']}>
print("tags:")
print(type(tags)) # <class 'str'>
print(tags) # I get only str - "dinner"
if tags:
queryset = Recipe.objects.filter(tags__slug__in=tags).distinct()
return queryset
要获取列表,您需要使用 getlist
。在您的情况下,它看起来像这样:
params.getlist("tags[]")
这是因为您正在使用类型 QueryDict
而不是 dict
的实例。您可以找到更多信息