Django使用列表Django过滤多对多对象

时间:2014-12-20 09:05:19

标签: python django django-queryset

我正在尝试根据多对多字段过滤对象。

profiledata = UserProfile.objects.get(user=newdata)
role = profiledata.role
ib = IdealBehaviour.objects.filter(cbs_role = cbsrole)
a_questions = Questions.objects.filter(Q(role=role) & Q(ideal_behaviour=ib))

这里我没有得到a_questions。 这样做我得到错误。

(1242, 'Subquery returns more than 1 row')
Django Version: 1.5.1
Exception Type: DatabaseError
Exception Value:    
(1242, 'Subquery returns more than 1 row')
Exception Location: /usr/lib/python2.7/dist-packages/MySQLdb/connections.py in defaulterrorhandler, line 36
Python Executable:  /usr/bin/python
Python Version: 2.7.6

我尝试使用_in lookup

a_questions = Questions.objects.filter(Q(role=role) & Q(ideal_behaviour_in=ib))

获取错误

Cannot resolve keyword 'ideal_behaviour_in' into field. Choices are: created_time, id, ideal_behaviour, question, role

我不知道我在做什么错。 因为IdealBehaviour与CBSROLE有许多关系,所以ib正在被正确过滤 请帮帮我。

1 个答案:

答案 0 :(得分:4)

你需要__in的双下划线,这里你不需要Q.

a_questions = Questions.objects.filter(role=role, ideal_behaviour__in=ib)