我想根据查询参数更改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
的实例。你可以在这里找到更多信息。