Django REST Framework过滤中purchaser__username=username的含义
purchaser__username=username 语法说明 这是Django ORM原生支持的跨关联关系字段查询写法,不是Django Rest Framework独有的特性,所有Django的数据库查询操作都可以使用这个语法。
语法逻辑拆解
- 前提:你的
Purchase模型里肯定定义了一个叫purchaser的关联字段,绝大多数场景是ForeignKey外键,指向存储用户信息的模型(一般是Django自带的User模型),而这个用户模型里有username字段存储用户名。 - 分隔符规则:Django ORM用连续两个下划线
__作为特殊分隔符,作用是让你不需要手写SQL的JOIN连表逻辑,ORM会自动完成表关联,允许你直接引用关联模型的字段做筛选。 - 对应到你代码里的写法:
queryset.filter(purchaser__username=username)的实际含义就是筛选出所有「关联的购买人(purchaser)用户名,等于URL查询参数里传入的username值」的Purchase记录。
举个实际例子:如果你访问的接口地址是/purchases?username=wangwu,这段代码就会返回所有购买人是wangwu的消费记录。
扩展用法
双下划线除了用来跨表引用关联字段,还可以拼接查询修饰符实现更复杂的过滤,常见的写法比如:
purchaser__username__contains="wang":匹配用户名包含wang的用户对应的购买记录purchaser__date_joined__gte="2023-01-01":匹配2023年1月1日及以后注册的用户对应的购买记录purchaser__is_active=False:匹配已注销用户对应的购买记录
内容的提问来源于stack exchange,提问作者Punyawee Srithongkerd
相关产品推荐
相关产品推荐

