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

Django中通过ManyToMany字段查询指定账户类型User数据的问题咨询

问题原因

你出现报错的核心原因是:直接给多对多关联字段的__in查询传入账户类型名称字符串时,Django默认会尝试匹配关联表AccountTypes的主键id,你传入的字符串无法转换为数字类型的主键值,因此触发了ValueError。

正确实现方式

下面提供两种常用的可行查询方案:

方案1:跨关联表指定字段查询(推荐)

直接通过Django ORM的双下划线语法,指定匹配AccountTypes的name字段即可:

# 查询uuid匹配,且拥有Mentor账户类型的单个用户
# 注意:get仅在确定查询结果唯一时使用,否则建议用filter
user = User.objects.get(uuid=你的用户uuid变量, account_types__name="Mentor")

# 如果需要匹配多个账户类型,可以结合__in使用
users = User.objects.filter(account_types__name__in=["Mentor", "Mentee"])

方案2:先查询账户类型实例再关联查询

如果你需要复用账户类型实例,可以先拿到对应的AccountTypes对象再做查询:

# 先获取名称为Mentor的账户类型实例
mentor_type = AccountTypes.objects.get(name="Mentor")
# 再查询关联了该账户类型的用户
user = User.objects.get(uuid=你的用户uuid变量, account_types=mentor_type)
补充说明
  • 如果你的查询结果可能返回多条数据,不要使用get方法,改用filter方法获取QuerySet结果集
  • 你当前定义的account_types多对多字段的related_name设置为account_types,该参数是AccountTypes反查关联User时使用的,例如你可以通过mentor_type.account_types.all()获取所有Mentor类型的用户,你也可以根据业务习惯调整命名避免混淆

内容的提问来源于stack exchange,提问作者Lutaaya Huzaifah Idris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:01