Django中多对多字段使用contains查询报错,如何解决?
解决Django ManyToMany字段查询的FieldError问题
嘿,我来帮你搞定这个查询错误!你遇到的问题主要有两个关键点:
1. 先修正笔误
你写的查询里assigend_to是拼写错误,得和模型里的字段名保持一致——assigned_to,这个小失误也可能引发额外问题哦。
2. 错误的查询Lookup类型
contains这个查找方式是专门给文本/字符串字段设计的,用来匹配包含特定文本的内容,但你的assigned_to是ManyToManyField,关联的是User对象集合,根本不是文本类型,所以Django才会抛出FieldError。
正确的查询写法
针对ManyToMany字段,要查询分配给特定用户的任务,直接用对象匹配就可以了:
tasks_for_myuser = Tasks.objects.filter(assigned_to=myuser)
如果之后需要匹配多个用户中的任意一个,也可以用__in:
# 比如查询分配给myuser或者其他用户的任务 tasks_for_myuser = Tasks.objects.filter(assigned_to__in=[myuser, another_user])
另外补充个小提示:如果你的myuser是用户ID而不是User实例,那可以用assigned_to_id来直接匹配ID:
tasks_for_myuser = Tasks.objects.filter(assigned_to_id=myuser_id)
这样就能正确返回所有分配给目标用户的Tasks实例啦!
内容的提问来源于stack exchange,提问作者Abhijit Ghate
相关产品推荐
相关产品推荐

