我有两个通过模型中的FK约束连接的类。执行查询后,我在QuerySet
中打包一个返回对象列表,其中相关对象的字段与相等比较匹配。
tagList = ContractPlanTags.objects.filter(tag_value_id = "44") | ContractPlanTags.objects.filter(tag_value_id = "45")
tagCollection = []
for tag in tagList:
if tag.tag_value_id.tag == u"SNPFlag" | tag.tag_value_id.tag == u"PlanType":
tagCollection.append(tag)
作为参考,tag_value_id
是对包含tag
字段的另一个对象的FK引用。由于if比较,我得到了
ERROR: test_metaobject_access (app.tests.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jason/workspace-sts/rowdmap_taxonomy/app/tests.py", line 58, in test_metaobject_access
if tag.tag_value_id.tag == u"SNPFlag" | tag.tag_value_id.tag == u"PlanType":
TypeError: unsupported operand type(s) for |: 'unicode' and 'unicode'
如何解决此错误?
答案 0 :(得分:3)
我想你想要一个boolean or
operator:
if tag.tag_value_id.tag == u"SNPFlag" or tag.tag_value_id.tag == u"PlanType":
或者,对于这种特定情况,您还可以使用in
成员资格测试:
if tag.tag_value_id.tag in {u"SNPFlag", u"PlanType"}:
你不能在unicode字符串上使用|
bitwise OR operator;它通常适用于整数:
>>> 10 | 1
11
或套装(见所有supported set operations):
>>> {1, 2} | {2, 3}
set([1, 2, 3])
或定义__or__
special method的对象,例如特定于Django的.filter()
方法返回的对象。