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

Django中如何查询多对多字段,筛选出当前登录用户关联的宠物

正确的查询写法

你可以直接通过Django ORM的双下划线跨关系查询实现需求,不需要额外通过username筛选,直接传入当前登录的request.user对象即可:

# 写法1:直接匹配User实例,推荐使用,逻辑更简洁高效
user_pets = Pet.objects.filter(owners__user=request.user)

如果你确实需要通过username字段筛选(比如某些场景下只能拿到用户名字符串),可以用下面的写法:

# 写法2:通过username字段匹配
user_pets = Pet.objects.filter(owners__user__username=request.user.username)

原理解释

  • Pet模型的owners字段是关联PetOwner的多对多字段,用双下划线__可以直接跨到PetOwner的字段
  • PetOwner的user字段是关联Django内置User的一对一字段,继续用双下划线就可以跨到User模型的字段做匹配

如果担心多对多查询出现重复结果,可以在查询末尾加.distinct()去重:

user_pets = Pet.objects.filter(owners__user=request.user).distinct()

内容的提问来源于stack exchange,提问作者The silent one

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:06