我正在使用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
返回管理用户对象
答案 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