[英]How to pass parameter to get_queryset in Django
I have Django API built in and I have endpoint the return all object.我有内置的 Django API,我有返回所有对象的端点。 I want the user to provide me with keyword to filter this queryset.我希望用户为我提供关键字来过滤这个查询集。 What is the best way to do it.最好的方法是什么。 and how to do it plz ?以及如何做到这一点?
is it in get_queryset?它在 get_queryset 中吗? if yes can you help me !?如果是,你能帮我吗!?
You have access to the GET parameters (in the querystring ) with self.request.GET
[Django-doc] .您可以使用self.request.GET
[Django-doc]访问 GET 参数(在querystring 中)。
So for example if there is a parameter ?category=foo
, you can access foo with self.request.GET['category']
, or self.request.GET.get('category')
if you want it to return None
in case it is missing.因此,例如,如果有一个参数?category=foo
,您可以使用self.request.GET['category']
或self.request.GET.get('category')
访问 foo 如果您希望它返回None
如果它丢失了。
You thus can filter for example with:因此,您可以过滤,例如:
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)
just give pass the parameter with some default value:只需传递带有一些默认值的参数:
def get_queryset(self, some_thing=default):
.
.
.
It will work它会工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.