python-3.x - 如何在 drf modelviewset 中获取字符串参数
问题描述
我需要使用带有可选参数的路径,通过 srting 指定用户,对于所有用户,请求看起来像 'api/users/specific_username' 或 'api/users'
网址:
router = DefaultRouter()
router.register(r'users', MyUserViewSet, basename='user-me')
意见:
class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
def get_queryset(self):
queryset = User.objects.all()
if self.kwargs['username']:
username=self.request.GET.get('username')
queryset = User.objects.filter(username=username)
return queryset
username=self.kwargs['username']
返回 KeyError
username=self.request.GET.get('username')
返回无
解决方案
我已经设法通过这样做来实现这一点:所以对于看起来像这样的请求:
http://example.com/api/viewset?username=denvercoder9
代码将如下所示:
def get_queryset(self):
"""
Optionally restricts the returned purchases to a given user,
by filtering against a `username` query parameter in the URL.
"""
queryset = Purchase.objects.all()
username = self.request.query_params.get('username', None)
if username is not None:
queryset = queryset.filter(purchaser__username=username)
return queryset
或者,如果您真的希望覆盖检索:( 尚未测试此代码)
def retrieve(self, request, pk=None):
queryset = User.objects.filter(username=pk)
contact = get_object_or_404(queryset, pk=1)
serializer = ContactSerializer(contact)
return Response(serializer.data)
推荐阅读
- string - 我想在 println 中运行一个循环
- c# - 如何使用 SQLite 数据库中的数据填充 ListView
- php - 按名称和返回路径递归搜索目录
- oauth - 我可以在没有客户端密码的情况下使用带有 PKCE 的 IdentityServer3 授权代码流吗?
- python-3.x - 如何停止 matplotlib 图例文本重叠?
- bash - 是否可以仅为当前命令会话禁用网络?
- python - 如何在 QTextEdit() 的第一个输入中从第二个窗口获取信息
- powershell - 新用户 powershell 获取服务
- swiftui - swiftui 是否有 hitTest 等价物?
- c# - 使用 Linq 进行列求和