You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Django REST Framework的API如何按userToken筛选订单?

问题:如何通过Retrofit获取指定userToken的订单列表?

现有基于Django REST Framework的订单API,返回的订单模型包含userToken、订单日期、商品及价格,示例响应如下:

{
    "userToken": "7e0e72e274bbda5e6f3cc9e3563f8c41384a37af",
    "date": "2023-05-14T08:11:05.689723Z",
    "product": [
        ...
    ],
    "price": 170
}

在浏览器中,通过以下URL可正确获取指定用户的订单列表:

base_url/Order/Order/?search=7e0e72e274bbda5e6f3cc9e3563f8c41384a37af

尝试了多种Retrofit写法均未成功:

  1. 使用userToken作为查询参数,返回全部订单:
@GET("Order/Order/")
suspend fun getOrder(@Query("userToken") userToken:String):Response<List<OrderResult>>
  1. 在URL后拼接?search=,仍返回全部订单:
@GET("Order/Order/?search=")
suspend fun getOrder(@Query("userToken") userToken:String):Response<List<OrderResult>>
  1. 使用Path参数拼接在search后,未获取到任何数据:
@GET("Order/Order/?search={userToken}")
suspend fun getOrder(@Path("userToken") userToken:String):Response<List<OrderResult>>

解决方案

问题核心是API期望的查询参数名是search,而非userToken——Django DRF的SearchFilter默认使用search作为查询参数名执行过滤逻辑。

正确的Retrofit写法如下:

@GET("Order/Order/")
suspend fun getOrder(@Query("search") userToken: String): Response<List<OrderResult>>

说明:

  • 该写法会生成与浏览器完全一致的请求URL:base_url/Order/Order/?search=xxx,其中xxx为传入的userToken值。
  • Retrofit会自动将@Query("search")指定的参数名和值拼接为正确的查询字符串,匹配API的过滤规则,从而返回指定userToken关联的订单。

内容的提问来源于stack exchange,提问作者Kring Lord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:43:12