简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM