python - 如何使用 Django REST API 按不同的参数进行搜索?
问题描述
假设我正在为具有产品或其他东西的应用程序开发后端,并且该应用程序将通过 REST API 与服务器通信。
每个产品将有多个字段,如标题、描述、价格、评级......
按多个字段过滤的好方法有哪些?
例子:
搜索字符串:游戏笔记本电脑
价格:从 400 美元到 1000 美元
评分:3星以上
...
我打算有一个字符串来确认搜索、获取、解析和返回结果的预定义规则。
因此,URL 看起来像这样:www.foo.com/products/search/contains=laptop&min_price=400&max_price=1000&min_stars=3
.
这些过滤器是可选的。
不确定是否采用单个字符串然后解析它是最好的方法。
解决方案
您可以通过像这样使用 Q 函数添加查询来做到这一点query = Q(price=myPrice)
,然后假设在某个条件下您想要向其添加另一个“和”条件
if conditional_variable:
query =& Q(name=productName)
(同样的事情适用于或陈述),而不是应用它,你可以这样做products = Products.objects.filter(query)
,另一方面,使条件大于或小于你可以这样做
Products.objects.filter(product_price__lte=1000)
这意味着小于或等于
您有 lt -> 小于、gt-> 大于、gte-> 大于或等于。使用您可以组合的那些,而不是您想要的,并使用 or 进行多个查询(我们使用 | for or)。
在我看来,对于复杂的查询,不要使用 get 过滤 url 中的 get 参数,而是尝试像上面那样在返回您想要的内容的帖子中执行它们。
我希望这有帮助。快乐编码!
推荐阅读
- git - 执行任何 git 命令都会关闭 Ubuntu 中的终端窗口
- python - 熊猫:仅填充数字(int或float)列
- r - 使用 bupaR,我如何将流程和性能图中的计数和时间组合到一张图中?
- r - r 解析中的编织错误(文本=x,srcfile=src)
- python - 在 Python 中一起使用打字模块中的 sys.intern(string) 和 NewType?
- ios - 应用程序退出后重置 Swift Struct 布尔值
- flutter - 点击 DropdownButton 时防止键盘关闭
- excel - 如何将小数四舍五入到最接近的 0.05?
- amazon-web-services - 附加到 EC2 实例的 IAM 策略规则是否重叠(&覆盖)附加到 EC2 内运行的 ECS 任务的策略规则?
- ssh - 使用 SSH 会话在远程桌面上打开 GUI 应用程序