Django Rest Framework视图集URL过滤器错误

时间:2019-05-14 03:35:58

标签: python django django-rest-framework

我正在使用django rest框架构建后端。我正在构建defauly django用户视图集和urlpattern路由器。如果要传入一个用户名,我想为该URL中的用户名添加一个过滤器,否则,请显示所有用户。我将在下面输入我的代码。

这是视图:

from django.contrib.auth.models import User
from ..serializers import UserSerializer
from rest_framework import viewsets

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer

    def get_queryset(self):
        queryset = User.objects.all()
        username = self.request.query_params.get('username', None)
        if username is not None:
            queryset = queryset.filter(username = username)
        return queryset

这是网址文件:

from users.api.views.userViews import UserViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'(?P<username>.+)/$', UserViewSet, base_name='user')
urlpatterns = router.urls

以下是设置中的网址:

path('api/users/', include('users.api.urls.userUrls')),

我想要以下内容:

api/users/返回所有用户 和 api/users/testAdmin返回管理用户对象

2 个答案:

答案 0 :(得分:1)

我认为您是在搜索lookup_field魔术,而不是 const_iterator
尝试以下代码片段,

Configuration

答案 1 :(得分:1)

您可以在视图中这样写:

def get_queryset(self, *args, **kwargs):
    requested_user = self.kwargs.get('username')
    if (requested_user):
        qs = yourqueryset.objects.filter(User__username=requested_user)
    else:
        qs = yourqueryset.objects.all().order_by('-timestamp')
    return qs