【问题标题】:How to pass parameter to get_queryset in Django如何在Django中将参数传递给get_queryset
【发布时间】:2019-12-29 15:05:01
【问题描述】:
我有内置的 Django API,我有返回所有对象的端点。我希望用户为我提供关键字来过滤此查询集。最好的方法是什么。以及如何做到这一点?
它在 get_queryset 中吗?如果是,你能帮帮我吗!?
【问题讨论】:
标签:
django
django-rest-framework
django-forms
django-templates
django-views
【解决方案1】:
只需给传递一些默认值的参数:
def get_queryset(self, some_thing=default):
.
.
.
会有用的
【解决方案2】:
您可以使用self.request.GET [Django-doc] 访问GET 参数(在查询字符串 中)。
例如,如果有一个参数?category=foo,您可以使用self.request.GET['category'] 访问foo,如果您希望它返回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)