如何将参数传递给 Django 中的 get_queryset

prg*_*dev 3 django django-templates django-forms django-views django-rest-framework

我有内置的 Django API,我有返回所有对象的端点。我希望用户为我提供关键字来过滤这个查询集。最好的方法是什么。以及如何做到这一点?

它在 get_queryset 中吗?如果是,你能帮我吗!?

Wil*_*sem 5

您可以使用[Django-doc]访问 GET 参数(在querystring 中)。self.request.GET

因此,例如,如果有一个 parameter ?category=foo,您可以使用 foo 访问 foo self.request.GET['category'],或者self.request.GET.get('category')如果您希望它None在丢失时返回。

因此,您可以过滤,例如:

from rest_framework import generics
from app.models import SomeModel
from app.serializers import SomeSerializer

class UserList(generics.ListAPIView):
    model = SomeModel

    def get_queryset(self):
        qs = super().get_queryset()
        category = self.request.GET.get('category')
        if category is None:
            return qs
        return qs.filter(category=categry)
Run Code Online (Sandbox Code Playgroud)