DRF ViewSet - 处理查询参数

时间:2021-07-20 15:06:13

标签: django-rest-framework django-rest-viewsets drf-queryset

我想根据查询参数更改我的 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

1 个答案:

答案 0 :(得分:0)

要获取列表,您需要使用 getlist。在您的情况下,它看起来像这样:

params.getlist("tags[]")

这是因为您正在使用类型为 QueryDict 而不是 dict 的实例。您可以找到更多信息here