django - 过滤器在 Django Rest 框架中不起作用
问题描述
我想过滤我的数据,就像假设我有一个模型 =>
- 用户
- 用户身份
- 用户名
- 用户描述
我想要的是=>
- 如果我选择 like =>
api/user/?userid=1
,它应该只返回 userid == 1 结果。 - 如果我选择 like =>
api/user/?username=test
,它应该只返回用户名 == 测试结果。
我做了什么?
我安装了 django-filter 并添加了这个
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
到setting.py,我这样测试,但是
为什么我得到我所有的记录? 甚至 URL 仅选择 userid = 1 api/user/?userid=1
和
如果我使用错误的 URL 参数进行测试,我得到了所有记录,甚至是错误的参数。
我对这个 => https://www.django-rest-framework.org/api-guide/filtering/#generic-filtering做同样的事情
更新
这是视图
class LeaveViewSet(viewsets.ModelViewSet):
queryset = Leave.objects.all()
serializer_class = LeaveSerializer
解决方案
您应该指定filterset_fields
- (doc)属性
class LeaveViewSet(viewsets.ModelViewSet):
queryset = Leave.objects.all()
serializer_class = LeaveSerializer
filterset_fields = ['user','other_fields']
由于您要查找嵌套关系,您可以将嵌套查找指定为
filterset_fields = ['user__id','user__username']
因此 URL 将变为
api/user/?user__id=1
推荐阅读
- filetable - FileTable file_stream 列:“无法在 varbinary 上调用方法”
- android-studio - Flutter - 如何在图像下方使用带有图像和文本/图标的容器小部件
- python - TensorFlow Probability 和 PyTorch 中未实现正态和拉普拉斯的 KL 散度
- ruby-on-rails - 为什么 Trailblazer 会出现“没有将 Symbol 隐式转换为 Hash”的错误?
- mips32 - MIPS 基本存储(地址为零?)
- django - 无法使用 heroku 部署 django api
- python - 数学测验任务 3 在一个名字上保存 3 个分数
- python - Pandas DataFrame - 创建动态列数
- reactjs - 在 codepen 的反应组件中包含引导程序
- flutter - 出现键盘时白框遮挡视图